#include <LiquidCrystal_I2C.h>//library untuk layar LCDI2C
#include <Wire.h>//library untuk komunikasi I2C
#include "DHTesp.h"//library untuk membaca sensor dari DHT22
LiquidCrystal_I2C lcd(0x27, 20, 4); //mendeklarasikan objek lcd
const int DHT_PIN = 12;//mengubah nama PIN
//Mendeklarasikan Konstanta untuk menentukan pin yang mengendalikan led
const int merah = 4;
const int kuning = 5;
const int hijau = 2;
//mengubah objek yang semula DHTesp menjadi dhtsensor
DHTesp dhtSensor;
//Fungsi untuk inisialisasi awal
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //mengkonfigurasi objek dhtSensor
//untuk menggunakan sensor DHT22 yang terhubung ke pin DHT_PIN.
//mengatur pin sebagai output sehingga lampu LED dapat dikendalikan
pinMode(merah, OUTPUT);
pinMode(kuning, OUTPUT);
pinMode(hijau, OUTPUT);
//menginisialisasi layar LCD dengan lcd.init() dan menghidupkan backlight layar dengan lcd.backlight().
lcd.init();
lcd.backlight();
}
//fungsi untuk membersihkan layar LCD
void clearLCD() {
lcd.clear();
//mengatur posisi kursor ke baris 1, kolom 0, dan mencetak spasi kosong untuk membersihkan teks di baris tersebut.
lcd.setCursor(0, 0);
lcd.print(" ");
//yang mengatur posisi kursor ke baris 2, kolom 0, dan mencetak spasi kosong untuk membersihkan teks
lcd.setCursor(0, 1);
lcd.print(" ");
}
void loop() {
//membaca data suhu dari sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
//mendeklarasikan suhuC dan menyimpan dalam variabel status
int suhuC = data.temperature;
String status;
//Mengendalikan lampu LED dan status sesuai dengan suhu
if (suhuC >= 25 && suhuC < 30){
digitalWrite(hijau, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
status = "Low";
}
else if (suhuC >= 30 && suhuC < 35){
digitalWrite(hijau, HIGH);
digitalWrite(kuning, HIGH);
digitalWrite(merah, LOW);
status = "Medium";
} else if (suhuC >= 35) {
digitalWrite(hijau, HIGH);
digitalWrite(kuning, HIGH);
digitalWrite(merah, HIGH);
status = "High";
} else {
digitalWrite(hijau, LOW);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
status = "Off";
}
clearLCD(); // Membersihkan layar LCD sebelum menampilkan data baru
//mencetak data suhu
Serial.println("Temp: " + String(data.temperature, 1) + "°C");
Serial.println("Fan Power: " + String (status));
Serial.println("---");
//mengatur posisi kursor layar LCD dan mencetak data suhu
lcd.setCursor(5, 1);
lcd.print("Temp : ");
lcd.print(suhuC);
//mengatur posisi kursor layar LCD dan mencetak status kipas.
lcd.setCursor(2, 2);
lcd.print("Fan Power : ");
lcd.print(status);
delay(500);
}