#include <LiquidCrystal_I2C.h>
#include <DHT.h>

#define DHTPIN 4        // Pin data sensor DHT22 terhubung ke pin 2
#define DHTTYPE DHT22   // Tipe sensor DHT (DHT22)
#define RELAY_PIN 2     // Pin relay terhubung ke pin 12

DHT dht(DHTPIN, DHTTYPE);  // Inisialisasi objek DHT
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Inisialisasi objek LCD dengan alamat 0x27, 16 kolom, dan 2 baris

void setup() {
  Serial.begin(9600);
  dht.begin();  // Inisialisasi sensor DHT

  pinMode(RELAY_PIN, OUTPUT);  // Atur pin relay sebagai output

  lcd.init();         // Inisialisasi LCD
  lcd.backlight();    // Aktifkan backlight LCD
  lcd.clear();        // Bersihkan tampilan LCD
}

void loop() {
  float temperature = dht.readTemperature();  // Baca suhu dari sensor DHT
  float humidity = dht.readHumidity();        // Baca kelembaban dari sensor DHT

  if (isnan(temperature) || isnan(humidity)) {  // Periksa apakah nilai suhu dan kelembaban valid
    Serial.println("Gagal membaca data dari sensor DHT!");
    return;
  }

  lcd.setCursor(0, 0);  // Set kursor LCD ke baris pertama, kolom pertama
  lcd.print("Suhu: ");   // Tampilkan label "Suhu: "
  lcd.print(temperature);  // Tampilkan nilai suhu
  lcd.print(" C");         // Tampilkan satuan Celsius

  lcd.setCursor(0, 1);  // Set kursor LCD ke baris kedua, kolom pertama
  lcd.print("Hum: ");    // Tampilkan label "Hum: "
  lcd.print(humidity);   // Tampilkan nilai kelembaban
  lcd.print(" %");       // Tampilkan persentase kelembaban

  if (temperature > 25) {  // Jika suhu lebih dari 25 derajat Celsius
    digitalWrite(RELAY_PIN, HIGH);  // Nyalakan relay
  } else {
    digitalWrite(RELAY_PIN, LOW);   // Matikan relay
  }

  delay(1000);  // Tunda 1 detik sebelum membaca ulang suhu
}
NOCOMNCVCCGNDINLED1PWRRelay Module