Hey guys!
I have a problem with my code for displaying Temeperature and Humidity data (sensor is DHT11) on an 16x2 LCD screen (although mine has a module underneath with only 4 pins).
First of all the code isn't mine. I modified the project, adding on the breadboard a blue,green and red LED for LOW,MEDIUM and HIGH temperature values. I've also added to the code to print the "LOW,MED and HIGH" words next to the "Temp" word but my problem is that every 1 sec these words flash for a little (I guess less than 10ms) beofre it refreshes. I want to make these flashes dissapear. I understand that in the void loop it starts all over again and that these flashes make sense due to the code but is there any solution to that? (I uploaded a zip video file showing my problem)
Also, is there any simplest method to clear the words "LOW", "MED" and "HIGH" every time it detects different parameters (t>25, t<25 && t>22 and t<22) without writing all these:
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(" ");
Anyway, this is the code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"#define DHTPIN 2 // Sesnor Pin
#define DHTTYPE DHT11 // define the type of sensor usedDHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor.
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 in PCF8574 by NXP and Set to 0x3F in PCF8574A by Ti
int redLED=7;
int blueLED=5;
int greenLED=10;
int BUZZER=8;byte degreec[ ] =
{
B11000,
B11000,
B00011,
B00100,
B00100,
B00100,
B00011,
B00000
};void setup()
{
pinMode(5,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(redLED,LOW);
digitalWrite(blueLED,LOW);
digitalWrite(greenLED,LOW);
digitalWrite(BUZZER,LOW);pinMode(3,OUTPUT);
digitalWrite(3,HIGH);
lcd.init();
lcd.backlight();
lcd.createChar(0, degreec);
lcd.home();
dht.begin();
lcd.setCursor(0,0);
lcd.print("Initializing");
delay(1000);
lcd.setCursor(12,0);
lcd.print(".");
delay(1000);
lcd.setCursor(13,0);
lcd.print(".");
delay(1000);
lcd.setCursor(14,0);
lcd.print(".");
delay(1000);
lcd.setCursor(12,0);
lcd.print(" ");
lcd.setCursor(13,0);
lcd.print(" ");
lcd.setCursor(14,0);
lcd.print(" ");
delay(1000);
lcd.setCursor(12,0);
lcd.print(".");
delay(1000);
lcd.setCursor(13,0);
lcd.print(".");
delay(1000);
lcd.setCursor(14,0);
lcd.print(".");
delay(1000);
lcd.setCursor(12,0);
lcd.print(" ");
lcd.setCursor(13,0);
lcd.print(" ");
lcd.setCursor(14,0);
lcd.print(" ");
delay(1000);
lcd.setCursor(12,0);
lcd.print(".");
delay(1000);
lcd.setCursor(13,0);
lcd.print(".");
delay(1000);
lcd.setCursor(14,0);
lcd.print(".");
delay(1000);
lcd.setCursor(0,1);
lcd.print("Task complete");
delay(1500);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
delay(100);}
void loop()
{
float h = dht.readHumidity(); // Read Humidity
float t = dht.readTemperature(); // Read temperature as Celsius
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.setCursor(10,0);
lcd.print(t);
lcd.setCursor(15,0);
lcd.write(degreec);
lcd.setCursor(0,1);
lcd.print("Humd:");
lcd.setCursor(10,1);
lcd.print(h);
lcd.setCursor(15,1);
lcd.print("%");if(t>25)
{
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print("HIGH");
digitalWrite(redLED,HIGH);
digitalWrite(greenLED,LOW);
digitalWrite(blueLED,LOW);
digitalWrite(BUZZER,HIGH);
delay(500);
digitalWrite(redLED,LOW);
digitalWrite(BUZZER,LOW);
delay(500);
}
else if(t<25 && t>22)
{
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(" ");digitalWrite(BUZZER,LOW);
digitalWrite(redLED,LOW);
digitalWrite(blueLED,LOW);
digitalWrite(greenLED,HIGH);
lcd.setCursor(5,0);
lcd.print("MED");
delay(1000);
}
else if(t<22)
{
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print("LOW");
digitalWrite(redLED,LOW);
digitalWrite(greenLED,LOW);
digitalWrite(BUZZER,HIGH);
digitalWrite(blueLED,HIGH);
delay(500);
digitalWrite(BUZZER,LOW);
digitalWrite(blueLED,LOW);
delay(500);
}
}
VID_20210419_121954 LCD blinking.zip (2,2 MB)