ขอคำแนะนำด้วยครับ lcd set 100 แล้วปรับลงมา ที่เลข 2 หลักแล้วเลข 0 ค้างตลอด


ค่านี้อะหรอ

วางโค้ตให้ดูด้วยครับ

define BLYNK_PRINT Serial

// define PIN Mapping
#define PIN_RELAY1  D0  // relay 1 FAN
#define PIN_RELAY2  D5  // relay 2 PUMP
#define PIN_DHT     D4  // dht temperture & humidity sensor
#define ON  HIGH
#define OFF LOW

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN      PIN_DHT   
#define DHTTYPE     DHT22     // DHT 22 (AM2302)
DHT_Unified dht(DHTPIN, DHTTYPE);
sensors_event_t event;

char auth[] = "NHdU_0h-KXEMrsC42NPIX"; //Token key smart farmV2
char ssid[] = "CIS HOME 2"; //SSid
char pass[] = "CIS961"; //password
 

float tempSensorData  = 0;
float humiSensorData  = 0;
bool  autoCondition;
int   set_Temp       = 35;
int   set_hum       = 33;
BlynkTimer timer;

void programProcess()
{
  
  if(autoCondition)
  {
    Serial.println(set_Temp);
    Serial.println(set_hum);
    Serial.println(tempSensorData);
    if(tempSensorData > set_Temp)
    {
      //เปิด fan
      Serial.println("fan on");
      digitalWrite(PIN_RELAY1,ON);
      Blynk.virtualWrite(V11,HIGH);
      
    }

   else
    {
      //ปิด FAN
      Serial.println("fan off");
      digitalWrite(PIN_RELAY1,OFF);
      Blynk.virtualWrite(V11,LOW);
     
    }
  
    if(humiSensorData< set_hum)
    {
      //เปิด pump
      Serial.println("pump on");
      digitalWrite(PIN_RELAY2,ON);
      Blynk.virtualWrite(V12,HIGH);
    }
    else
    {
       //ปิด pump
      Serial.println("pump off");
      digitalWrite(PIN_RELAY2,OFF);
      Blynk.virtualWrite(V12,LOW);
    }
  }
}

void updateSensor()
{
  // check temperature 
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println(F("Error reading temperature!"));
  }
  else {
    tempSensorData = event.temperature;
    Serial.print(F("Temperature: "));
    Serial.print(tempSensorData);
    Serial.println(F("°C"));

    Blynk.virtualWrite(V0,tempSensorData);
  }
  
  // check humidity
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println(F("Error reading humidity!"));
  }
  else {
    humiSensorData = event.relative_humidity;
    Serial.print(F("Humidity: "));
    Serial.print(humiSensorData);
    Serial.println(F("%"));

    Blynk.virtualWrite(V1,humiSensorData);
  }
}

void updateLCD()
{
    if(autoCondition)
    {
      lcd.setCursor(13,1);
      lcd.print("[A]");
    }
    else
    {
      lcd.setCursor(13,1);
      lcd.print("[M]");
    }
    lcd.setCursor(2,0);
    lcd.print(tempSensorData);
    lcd.setCursor(10,0);
    lcd.print(humiSensorData);

     lcd.setCursor(3,1);
    lcd.print(set_Temp);
    lcd.setCursor(10,1);
    lcd.print(set_hum);
  
}

BLYNK_WRITE(V2)
{
  set_Temp = param.asInt();
}

BLYNK_WRITE(V3)
{
  set_hum = param.asInt();
}

BLYNK_WRITE(V10)
{
  autoCondition = param.asInt();
}

BLYNK_WRITE(V11)
{
  if(!autoCondition)
  {
    if(param.asInt())
    {
      digitalWrite(PIN_RELAY1,ON);
      Blynk.setProperty(V11, "offLabel", "disable");//
    }
    else
    {
      digitalWrite(PIN_RELAY1,OFF);
    }
  }
}

BLYNK_WRITE(V12)
{
  if(!autoCondition)
{
  if(param.asInt())
  {
    digitalWrite(PIN_RELAY2,HIGH);
    Blynk.setProperty(V12, "offLabel", "disable");
  }
  else
  {
    digitalWrite(PIN_RELAY2,LOW);
  }
}
}
BLYNK_CONNECTED()
{
  Blynk.syncAll();
}

void setup()
{
  // Set Pin Mode Output
  pinMode(PIN_RELAY1, OUTPUT);     
  pinMode(PIN_RELAY2  , OUTPUT);    
      
  // Set default PIN Value HIG=1,LOW=0
  digitalWrite(PIN_RELAY1 , OFF);
  digitalWrite(PIN_RELAY2 , OFF);
  
  // Debug console
  Serial.begin(9600);
  dht.begin();

  lcd.init();  
  lcd.backlight();
  
  lcd.setCursor(0,0);
  lcd.print(" Smart Farm V.1 ");
   lcd.setCursor(0,1);
  lcd.print(" By Yothin DIY ");
  delay(5000);
  lcd.setCursor(0,1);
  lcd.print("ST:    SH:   ");
  lcd.setCursor(13,1);
  lcd.print("[M]");
  lcd.setCursor(0,0);
  lcd.print("T:      H:   ");
  
  Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);//ใส่ชื่อ WIFI and PASSWORD
  //Blynk.begin(auth, ssid, pass);
  updateSensor();
  timer.setInterval(2500L,updateSensor);
  timer.setInterval(5000L,programProcess);
  timer.setInterval(1000L,updateLCD);
}

void loop()
{
  Blynk.run();
  timer.run();
 
}

ใช่ครับ ทั้ง ST: , SH: เลยครับ โค้ดตามด้านล่างครับ

1 Like

สั่ง LCD Clear ข้อมูล ก่อนเขี่ยนข้อมูลใหม่ครับ เพาะของเก่า 3 หลัก ของใหม่ 2 ดังนั้นหลักที่ 3 ยังค้างอยู่

1 Like

lcd.clear () ต้องวางไว้ตรงไหนครับผมลองแล้ว สักพัก…ไม่มีตัวเลขขึ้นจอเลย

เหมือนผมก็เคยเจอเคสนี้มาก่อน ตามที่ พี่ @KD2NYY บอกเลยครับ เคลียร์จอบรรทัดบน แล้วสิ่ง printLCD ใหม่

ยังแก้ไม่ได้ ตอนนี้แก็โดยตั้งค่า blynk V pin 0-99 เอาครับ

ขอดู Code ที่เขียนแก้หน่อยครับ แทรกไว้ตรงไหน

ถามเพิ่ม
1 Code นี้เขียนองหรือ สำเนา เอามาใช้ทั้งหมดครับ
2 การเขียนข้อมูลส่งให้ LCD เขียนแบบไหน คือ เขียนข้อความใหม่ทุกครั้ง
หรือ เขียนเป็น Form ไว้ แล้วมาเติมข้อมูล ในส่วนของค่าที่วัดได้
กับค่าที่ Set จาก Blynk ตอน วนLoop

พี่ @PUYIOT เคยตอบเพื่อแก้ไขเรื่องนี้ไปแล้วครับ สงสัยต้องเพิ่ม feature ค้นหาคำเพิ่มแล้วละ จะได้สะดวก ตอนหาข้อมูล เช่นกำลังพิมพ์เพื่อตั้งกระทู้ถาม " แก้ปัญหาจอ LCD " ก็ขึ้นหัวข้อกระทู้ที่เกี่ยวข้อง ให้อัตโนมัติ

ปกติเวลาเราตั้งกระทู้ มันจะดึงมาให้อยู่แล้วครับ แต่บนมือถือยังไม่รองรับ

1 Like

@KD2NYY ขอบคุณสำหรับข้อเสนอแนะครับ หากมีไอเดียอื่นๆ สามารถเสนอแนะเข้ามาได้เลยนะครับ สมาชิกท่าน อื่นๆ ก็เช่นกัน @yothin @PUYIOT พี่ @PUYIOT นี้ผมขอคำชีแนะบ่อย เว็บนี้จะเติบโตไปพร้อมกับเรา การเดิมทางพึ่งจะเริ่มนะครับ :grin:

going merry one piece GIF by Funimation

ต่อท้ายด้วย code นี้ครับ ซึ่งเราก็อาจจะไม่ต้อง Clear จอครับ
และให้ขยับ/เลื่อนชุดข้อความขวามือไปทางขวาอีก 1 ตำแหน่ง

lcd.print((char)0x20);

ตัวอย่าง
lcd.setCursor(5, 0);
lcd.print(“200”);//ค่านี้เป็นค่าที่รับมาจากการอ่านนะครับ แต่ตัวอย่างผมกำหนดเป็นตัวเลข
lcd.print((char)0x20);

หมายถึง ตำแหน่ง 5,0 ให้แสดงข้อความ 200 ลงไป โดย
เลข 2 อยู่ที่ตำแหน่ง 5
0 จะอยู่ในตำแหน่งที่ 6
0 จะอยู่ในตำแหน่งที่ 7
ว่าง (lcd.print((char)0x20):wink: จะอยู่ในตำแหน่งที่ 8
ก็เท่ากับว่า ตำแหน่งที่ 8 จะว่าง ดังนั้นเราจึงเห็นจากจอ LCD เป็น 3 หลักครับ

และต่อมาสมมุติว่าค่าที่รับมาได้เป็น 2 หลัก เช่น 20 ก็จะเป็นในลักษณะนี้ครับ

เลข 2 อยู่ที่ตำแหน่ง 5
0 จะอยู่ในตำแหน่งที่ 6
ว่าง (lcd.print((char)0x20):wink: จะอยู่ในตำแหน่งที่ 7 (เดิมมีค่าเป็น 0 จากหลักที่ 3 ของ 200 ก็จะหายไป)

ก็เท่ากับว่า ตำแหน่งที่ 7 จะว่าง ดังนั้นเราจึงเห็นจากจอ LCD เป็น 2 หลักครับ

2 Likes



3 Likes

ขอบคุณทุกคำแนะนำครับ แต่คงไม่มีเวลาไปต่อกับส่วนหน้าจอแล้ว ปรับไว้ 0 - 99 ไว้ก่อนครับ ตอนนี้ผมได้เพิ่มเซอโวไว้เปิดช่องระบายอากาศ อยากสอบถามว่าสัญญาณควบคุมเซอโว สามารถต่อหลาย ๆ ตัวเลยได้มั้ยครับ พอดีผมจะรีบเอาไปทดลองใช้กับโรงเรือนเพาะเห็ดฟางครับ ขอบคุณทุกคนที่ให้คำแนะนำ ขอบคุณเจ้าของ blynk server ครับ


คำถามคือแต่ละตัวทำงานเหมือนกันทั้งหมดหรือไม่

1 Like

ใช่ครับเปิดปิดพร้อมกัน

คือจะใช้ Pin เดีนสกันต่อหลายตัวงี้หรอ

ครับ pin เดียวควบคุมการทำงานเซอร์โวหลายตัว ทำงานองศาเดียวกัน ไปพร้อมกัน

จริงๆ มันลองต่อดูเลยก็ได้นะครับ เป็นห่วงแต่ว่าแรงดัน PWM มันจะตกรึป่าวหากนำไปต่อพ่วง ถ้าตกมันก็แค่จะไม่ทำงาน ผมว่าควรแยก pin แต่สั่งให้ จ่าย pwm เหมือนกันน่าจะตรงประเด็นกว่า

1 Like