ช่วยดูโค้ดหน่อยครับ มีปัญหากับการใช้ LCD Blynk widget

สวัสดีครับ กำลังมีปัญหากับการใช้ LCD widget บนBlynkอะครับ ตอนนี้ผมทำโปรเจ็กระบบรดน้ำต้นไม้อยู่ครับ
อยากจะให้ระบบแจ้งเตือนใน LCD ในblynkเวลาที่ไม่สามารถอ่านค่าของsensorได้อะครับ

ถ้าระบบปกติจะขึ้นว่า status : okแบบรูปข้างล่างอะครับ

แต่พอผมลองทดสอบเอาสาย จากsensorออก ตัวหนังสือมันทับกันอะครับ แบบรูปข้างล่าง

ลองใช้ฟังก์ชั่น lcd.clear(); ก่อน lcd.print(2, 1,“Status: Error”); ก็ไม่หายครับ

ตัวหนังสือซ้อนกัน ดังภาพ ลองลบช่องว่าง หน้า่คำว่า “Error” ดูครับ หรือ ไม่งั้น ก่อนจะสั่งพิมพ์ข้อความใหม่ ลองเคลียร์ข้อความเดิมออกก่อน ง่ายสุด ก็ Print ช่องว่าง เท่ากับจำนวนตัวอักษร หรือ ทั้ง บรรทัดก็ได้ครับ ลองดู

1 Like

S__58654723

อัพเดทครับ ลองลบช่องว่าง กับ พิมพ์บรรทัดเปล่าก่อน พิมพ์ข้อความerror ยังไม่ได้ครับ ตัวอักรษรมันทับกันอะครับ
แต่พอผมลองเสียบสายเข้าบอร์ด ก็ขึ้นStatus : OK ปกติครับ

นี่โค้ทที่แก้ไปครับ

1 Like

โค้ทเต็มครับ

type or paste code here
#include <WiFi.h>
#include <IOXhop_FirebaseESP32.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>



#define FIREBASE_HOST "smart-farm-a44eb-default-rtdb.firebaseio.com/"   // the project name address from firebase id
#define FIREBASE_AUTH "BKSC8Hpz3eQm6EpFYJ69QuWNslUEZWrhzpogND8g"       // the secret key generated from firebase

#define BLYNK_PRINT Serial
#define DHTPIN 5
#define DHTTYPE DHT11
WidgetLCD lcd(V24);



#define PUMP 19
WidgetLED led(V22);
int pinValue = 0;
int soilsensorPin = A0; 
int waterlevelPin = A3; 


int soilMoistureLimit = 0;
int temperatureLimit = 0;
int humidityLimit = 0;




DHT dht(DHTPIN, DHTTYPE);
float humidity_value;
float temperature_value;

int soilmoisture_value;
int percentage;
int map_low = 3679;
int map_high = 1400;

int waterlevel_value;
int rawlevel_value;
//int map_low = 3679;
//int map_high = 1400;





char auth[] = "WIHixIXfQWenw0A4x__N0T_Mykzwjrjf";
char ssid[] = "mukmug";
char pass[] = "024610687";



bool switchStatus = 0; // 0 = manual,1=auto

bool manualSwitch = 0; // 0 = water pump off , 1 = water pump on


BlynkTimer timer;

// sync all status
BLYNK_CONNECTED() {
    Blynk.syncAll();
}

// mode selection 0 = manual , 1 = auto
BLYNK_WRITE(V0)
{   
  switchStatus = param.asInt(); // Get value as integer
}

// set soil moisture limit
BLYNK_WRITE(V1)
{
  soilMoistureLimit = param.asInt(); // Get value as integer
  if(soilMoistureLimit == 100)
  {
     Blynk.notify("100% is the maximum value for set soilMoisture Limit");
    }
    else if(soilMoistureLimit == 1)
    {
      Blynk.notify("1% is the minimum value for set soilMoisture Limit");
      }
}
// set temperature limit
BLYNK_WRITE(V2)
{
  temperatureLimit = param.asInt(); // Get value as integer
  if(temperatureLimit == 50)
  {
     Blynk.notify("50 degree celsius is maximum for temperature limit");
    }
    else if(temperatureLimit == 1)
    {
      Blynk.notify("1 degree Celsius is the minimum value for set temperature limit");
      }
}
// set humidity limit
BLYNK_WRITE(V3)
{
  humidityLimit = param.asInt(); // Get value as integer

  if(humidityLimit == 100)
  {
     Blynk.notify("100 %h is maximum for set humidity Limit ");
    }
     else if(humidityLimit == 1)
    {
      Blynk.notify("1 %h is maximum for set humidity Limit");
      }
}


// update manualSwitch
BLYNK_WRITE(V4)
{
  manualSwitch = param.asInt();
}

WidgetTerminal terminal(V20);


BLYNK_WRITE(V23) 
{  // vPin is the Virtual Pin assigned to a Button Widget
  pinValue = param.asInt(); 
}


void manualAutoAction()
{
 

  


rawlevel_value = analogRead(waterlevelPin); //Get input as analog signal
//waterlevel_value = map(rawlevel_value, map_low, map_high, 0, 100); 

percentage = analogRead(soilsensorPin); //Get input as analog signal
soilmoisture_value = map(percentage, map_low, map_high, 0, 100); //Convert analog input to percentage 0% dry 100% wet
 

  
humidity_value = dht.readHumidity();
temperature_value = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit


  Blynk.virtualWrite(V5, humidity_value);  //V5 is for Humidity
  Blynk.virtualWrite(V6, temperature_value);  //V6 is for Temperature
  Blynk.virtualWrite(V7, soilmoisture_value);  //V7 is for soilmoisture


String fireHumid = String(humidity_value) + String("%");                                         //convert integer humidity to string humidity 
String fireTemp = String(temperature_value) + String("°C");   
String fireSoilmoisture = String(soilmoisture_value) + String("%"); 
Firebase.pushString("/DHT11/Humidity", fireHumid);                                  //setup path and send readings
Firebase.pushString("/DHT11/Temperature", fireTemp);                                //setup path and send readings   



  
  
  Serial.print("Humid = ");
  Serial.println(humidity_value);
  delay(500);
  Serial.print("temp = ");
  Serial.println(temperature_value);
  delay(500);
  Serial.print("Soil Moist = ");
  Serial.println(soilmoisture_value);
   Serial.println("%");
  delay(500);
  Serial.print("mode selection = ");
  Serial.println(switchStatus);
  delay(500);
  Serial.print("manualSwitch = ");
  Serial.println(manualSwitch);
  delay(500);

  Serial.print("raw level value = ");
  Serial.println(rawlevel_value);
  delay(500);

  terminal.print("Humid = ") ;
  terminal.println(humidity_value) ;
  delay(500);
  terminal.print("temp = ") ;
  terminal.println(temperature_value) ;
  delay(500);
  terminal.print("Soil Moist = ") ;
  terminal.println(soilmoisture_value) ;
  delay(500);
  terminal.print("mode selection = ") ;
  terminal.println(switchStatus) ;
  delay(500);

  
  
  if(switchStatus)
  {
    // auto
    if(soilmoisture_value <= soilMoistureLimit||(temperature_value <= temperatureLimit)||(humidity_value <= humidityLimit))
    {
      
       digitalWrite(PUMP,LOW);
      Serial.print("Auto mode activated");
      led.on();
      //digitalWrite(relayone,HIGH);
    }  
      else
      {
        digitalWrite(PUMP,HIGH);
      led.off();   
        }
      
  }
      else
    {
      if(pinValue == 1) //CHECK THAT FORCE WATERING BUTTON IS PRESSED
      {
        led.on();
        digitalWrite(PUMP,LOW);
        Serial.print("Auto mode deactivated");
        }
        else
        {
         led.off(); 
         digitalWrite(PUMP,HIGH);
          }
    
     
      
    }  //manual
 


} //close manual auto action

float Hmin=humidity_value;   //h
float Tmin=temperature_value;   //t

float Hmax=humidity_value;   //h
float Tmax=temperature_value;  //t


void minmax()
{
  {//humidity min
    if (Hmin == 0) {
      Hmin=humidity_value;
    }
    else if (Hmin > humidity_value) {
      Hmin=humidity_value;
    }
    Blynk.virtualWrite(V31, Hmin);
  }
  {//Humidity Max
    if (Hmax < humidity_value) {
      Hmax=humidity_value;
    }
    Blynk.virtualWrite(V30, Hmax);
  }
  {//temp min
   if (Tmin == 0) {
      Tmin=temperature_value;
    }
    else if (Tmin > temperature_value) {
      Tmin=temperature_value;
    }
    Blynk.virtualWrite(V33, Tmin);
  }
  {//temp Max
   if (Tmax < temperature_value) {
      Tmax=temperature_value;
    }
    Blynk.virtualWrite(V32, Tmax);
  }
  
  
}

void errormsg()
{
  lcd.print(2, 1,"             ");
  lcd.print(2, 1,"Status: Error");
  
  }

void okmsg()
{
  
  lcd.print(2, 1,"Status: OK");
  
  }

void checkTemp()
{
  

  if (isnan(humidity_value) || isnan(temperature_value)) {
    Serial.println("Failed to read from DHT sensor!");
    terminal.println("Failed to read from DHT sensor!") ;
    Blynk.notify("Failed to read from DHT sensor!");
    lcd.print(2, 1,"             ");
    errormsg();
    return;
  }
  else
  {
    lcd.clear();
    okmsg();
    }
 
}

void checkMoist()
{
  

  if (isnan(soilmoisture_value)) {
    Serial.println("Failed to read from soil moisture sensor!");
    terminal.println("Failed to read from soil moisture sensor!") ;
    Blynk.notify("Failed to read from soil moisture sensor!");
    errormsg();
    return;
  }
  else
  {
    okmsg();
    }
  
 
}

void setup()
{
  // Debug console
  Serial.begin(115200);
  
  pinMode(PUMP,OUTPUT);
  //digitalWrite(PUMP,HIGH);
  //digitalWrite(PUMP,LOW);
  
  dht.begin();
  WiFi.begin(ssid, pass);
  //Blynk.config(auth, ssid, pass);
  Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);  
  Blynk.connect();
  // key
  int rssi = WiFi.RSSI();
  Blynk.virtualWrite(V21, rssi);
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);  
  
  timer.setInterval(1000L, manualAutoAction);
  timer.setInterval(1000L, minmax);
  timer.setInterval(10000L, checkTemp);
  timer.setInterval(10000L, checkMoist);
}

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