#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Konfigurasi DHT
#define DHTPIN 4 // Pin sensor DHT
#define DHTTYPE DHT22 // Jenis sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C (0x27 atau 0x3F tergantung modul)
// Konfigurasi LED
#define LED_HIJAU 25
#define LED_KUNING 26
#define LED_MERAH 27
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi DHT
dht.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("DHT22 Monitoring");
delay(2000);
lcd.clear();
// Inisialisasi LED
pinMode(LED_HIJAU, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
}
void loop() {
// Membaca data suhu dan kelembapan
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
// Memastikan pembacaan sensor berhasil
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Failed to read from DHT sensor!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH); // Nyalakan merah sebagai tanda error
delay(2000);
return;
}
// Menampilkan data ke Serial Monitor
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.println(" °C");
Serial.print("Lembap: ");
Serial.print(kelembapan);
Serial.println(" %");
// Menampilkan data ke LCD
lcd.setCursor(0, 0);
lcd.print("Suhu : ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Lembap: ");
lcd.print(kelembapan);
lcd.print(" %");
// Logika Indikator LED
if (kelembapan >= 40 && kelembapan <= 60) {
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, LOW);
} else if ((kelembapan >= 20 && kelembapan < 40) || (kelembapan > 60 && kelembapan <= 80)) {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_MERAH, LOW);
} else {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH);
}
delay(2000); // Perbarui data setiap 2 detik
}