#include <LiquidCrystal_I2C.h>
#include <dht.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define relay 9
#define pir 8
dht DHT;
#define DHT22_PIN 2
// variabel untuk menyimpan data sebelumnya
float prevSuhu;
int prevHumid;
int prevKondisi;
void setup() {
Serial.begin(9600);
pinMode(relay, OUTPUT);
pinMode(pir, INPUT);
lcd.init();
lcd.backlight();
}
void loop() {
int chk = DHT.read22(DHT22_PIN);
float suhu = DHT.temperature;
int humid = DHT.humidity;
int kondisi = digitalRead(pir);
// cek apakah data sebelumnya berbeda sebelum mengupdate layar
if (suhu != prevSuhu || humid != prevHumid || kondisi != prevKondisi) {
lcd.clear();
if (kondisi == HIGH) {
lcd.setCursor(0, 0);
lcd.print("Terdeteksi Gerak");
lcd.setCursor(0, 1);
lcd.print("T/H : ");
lcd.setCursor(4, 1);
lcd.print(suhu);
lcd.setCursor(9, 1);
lcd.print(" | ");
lcd.setCursor(12, 1);
lcd.print(humid);
digitalWrite(relay, HIGH);
} else if (kondisi == LOW) {
lcd.setCursor(0, 0);
lcd.print("Tak Ada Gerakan ");
lcd.setCursor(0, 1);
lcd.print("T/H : ");
lcd.setCursor(4, 1);
lcd.print(suhu);
lcd.setCursor(9, 1);
lcd.print(" | ");
lcd.setCursor(12, 1);
lcd.print(humid);
digitalWrite(relay, LOW);
} else {
lcd.setCursor(0, 0);
lcd.print("Program Error");
}
// data terbaru
prevSuhu = suhu;
prevHumid = humid;
prevKondisi = kondisi;
}
delay(100);
}