#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin untuk DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
// Pin untuk LED
#define LED_MERAH 8
#define LED_HIJAU 7
// Inisialisasi DHT22
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // bisa 0x27 atau 0x3F
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_HIJAU, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Weather Monitor");
delay(2000);
lcd.clear();
}
void loop() {
// Baca sensor DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Jika gagal baca sensor
if (isnan(temperature) || isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
return;
}
// Tampilkan suhu & kelembaban di LCD
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print("C ");
lcd.setCursor(8, 0);
lcd.print("H:");
lcd.print(humidity, 0);
lcd.print("% ");
// Logika hujan / tidak hujan berdasarkan suhu
lcd.setCursor(0, 1);
if (temperature < 20) {
lcd.print("Sprinkle: YES ");
digitalWrite(LED_MERAH, HIGH);
digitalWrite(LED_HIJAU, LOW);
Serial.println("Hujan (Temp < 20C)");
} else if (temperature > 30) {
lcd.print("Sprinkle: NO ");
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_HIJAU, HIGH);
Serial.println("Tidak hujan (Temp > 30C)");
} else {
lcd.print("Status: UNCERT ");
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_HIJAU, LOW);
Serial.println("Tidak pasti (20C-30C)");
}
delay(2000);
}