#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN,DHTTYPE);
LiquidCrystal_I2C lcd (0x27,16,2);
int button = 7;
int lasteState=-1;
float previousTemp = NAN;
float previousHumi = NAN;
unsigned long previousMillis = 0;
const long interval = 500;
int relay = 8;
void setup() {
pinMode(button, INPUT_PULLUP);
lcd.init();
lcd.backlight();
dht.begin();
pinMode(relay, OUTPUT);
}
void loop() {
int stateB =digitalRead(button);
float temp =dht.readTemperature();
if (temp > 40.0)
{
digitalWrite(relay, HIGH);
}
else
{
digitalWrite(relay, LOW);
}
float humi =dht.readHumidity();
if (stateB != lasteState)
{
lcd.clear();
lasteState=stateB;
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if ( stateB == 1)
{
if (!isnan(temp) && !isnan(humi)) {
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(temp);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print("humi:");
lcd.print(humi);
lcd.print("%");
if (temp != previousTemp || humi != previousHumi) {
previousTemp = temp;
previousHumi = humi;
}
}
else
{
lcd.setCursor(0, 0);
lcd.print("Error reading");
lcd.setCursor(0, 1);
lcd.print("sensor data!");
}
}
else
{
lcd.setCursor(0,0);
lcd.print("Door is Open");
}
}
}