//Library
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi PIN
const int pinLDR = 13; // Pin ADC untuk LDR
const int pinRelay = 15; // Pin Digital untuk Relay
// Konfigurasi Threshold (Ambang Batas)
const int batasGelap = 30; // Lampu nyala jika cahaya < 30%
const int batasTerang = 40; // Lampu mati jika cahaya > 40% (Hysteresis)
void setup() {
Serial.begin(115200);
// Setup Pin
pinMode(pinRelay, OUTPUT);
// Inisialisasi LCD
lcd.init(); //ganti lcd.begin jika gunakan Arduino IDE
lcd.backlight();
// Tampilan Awal
lcd.setCursor(0, 0);
lcd.print(" PROJECT DASAR 6");
lcd.setCursor(0, 1);
lcd.print(" LAMPU OTOMATIS ");
delay(2000);
lcd.clear();
}
void loop() {
// 1. Baca nilai LDR dan ubah ke persen (0-100%)
int rawValue = analogRead(pinLDR);
int percent = map(rawValue, 4095, 0, 0, 100);
// 2. Logika Kontrol Relay dengan Hysteresis
// Note: Kebanyakan modul relay adalah ACTIVE LOW (LOW = Nyala)
if (percent < batasGelap) {
digitalWrite(pinRelay, HIGH); // Relay ON (Lampu Nyala)
tampilkanStatus(percent, "NYALA");
}
else if (percent > batasTerang) {
digitalWrite(pinRelay, LOW); // Relay OFF (Lampu Mati)
tampilkanStatus(percent, "MATI ");
}
// Debugging ke Serial Monitor
Serial.print("Cahaya: "); Serial.print(percent);
Serial.println("%");
delay(500); // Sampling data setiap 0.5 detik
}
// Fungsi bantu untuk update LCD biar kodingan rapi
void tampilkanStatus(int p, String status) {
lcd.setCursor(0, 0);
lcd.print("Cahaya: ");
lcd.print(p);
lcd.print("% "); // Spasi untuk hapus sisa angka
lcd.setCursor(0, 1);
lcd.print("Lampu : ");
lcd.print(status);
}