#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
const int ldrPin = 13; // Pin analog untuk LDR
const int relayPin = 19; // Pin digital untuk relay
const int threshold = 800; // Nilai threshold untuk menentukan gelap atau terang
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD dengan alamat I2C 0x27, dan ukuran 16x2
bool lampState = false; // Menyimpan status lampu
void setup() {
Serial.begin(115200); // Memulai komunikasi serial dengan baud rate 115200
pinMode(ldrPin, INPUT); // Mengatur pin ldrPin sebagai input
pinMode(relayPin, OUTPUT); // Mengatur pin relayPin sebagai output
digitalWrite(relayPin, LOW); // Mematikan lampu di awal
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Mengaktifkan backlight LCD
lcd.setCursor(0, 0); // Mengatur kursor LCD ke baris pertama, kolom pertama
lcd.print("Nilai LDR: "); // Menampilkan teks "Nilai LDR: " pada LCD
lcd.setCursor(0, 1); // Mengatur kursor LCD ke baris kedua, kolom pertama
lcd.print("Status: "); // Menampilkan teks "Lampu: " pada LCD
}
void loop() {
int ldrValue = analogRead(ldrPin); // Membaca nilai dari sensor LDR
Serial.print("Nilai LDR: "); // Mencetak teks "Nilai LDR: " ke Serial Monitor
Serial.println(ldrValue); // Mencetak nilai LDR ke Serial Monitor
lcd.setCursor(11, 0); // Mengatur kursor ke posisi setelah "Nilai LDR: "
lcd.print(ldrValue); // Menampilkan nilai LDR pada LCD
lcd.print(" "); // Membersihkan karakter sisa jika ada
bool newLampState = ldrValue < threshold; // Menentukan status lampu berdasarkan nilai LDR
if (newLampState != lampState) { // Jika status lampu berubah
lampState = newLampState; // Perbarui status lampu
if (lampState) {
// Jika cahaya gelap (nilai LDR di bawah threshold), nyalakan lampu
digitalWrite(relayPin, HIGH); // Menyalakan relay
Serial.println("Lampu Menyala"); // Mencetak teks "Lampu Menyala" ke Serial Monitor
lcd.setCursor(8, 1); // Mengatur kursor LCD ke posisi setelah "Lampu: "
lcd.print("Menyala"); // Menampilkan teks "Menyala" pada LCD
} else {
// Jika cahaya terang (nilai LDR di atas threshold), matikan lampu
digitalWrite(relayPin, LOW); // Mematikan relay
Serial.println("Lampu Mati"); // Mencetak teks "Lampu Mati" ke Serial Monitor
lcd.setCursor(8, 1); // Mengatur kursor LCD ke posisi setelah "Lampu: "
lcd.print("Mati "); // Menampilkan teks "Mati" pada LCD
}
}
delay(2000); // Delay 2 detik sebelum pembacaan berikutnya
}