/*
* Proyek 5 v4: Lampu Teras Otomatis + LCD
* Menambahkan LCD 16x2 I2C untuk menampilkan status.
*/
// === Library Baru ===
#include <Wire.h> // <-- BARU (Untuk I2C)
#include <LiquidCrystal_I2C.h> // <-- BARU (Untuk LCD)
// === Inisialisasi LCD ===
// Alamat 0x27 (atau 0x3F), ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2); // <-- BARU
// === Definisi Pin (Sama) ===
#define PIN_TRIG 9
#define PIN_ECHO 10
#define PIN_LDR A0
#define PIN_LED 11
// === Ambang Batas (Sama) ===
int ambangGelap = 300;
int ambangJarakDekat = 150;
// === Pengaturan Kecerahan (Sama) ===
int terangPenuh = 255;
int redup = 20;
int mati = 0;
void setup() {
Serial.begin(9600);
// Inisialisasi LCD
lcd.init(); // <-- BARU
lcd.backlight(); // <-- BARU (Nyalakan lampu latar)
// Pin mode (Sama)
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
// Set kondisi awal (Sama)
analogWrite(PIN_LED, mati);
// Tulis pesan selamat datang di LCD
lcd.setCursor(0, 0); // <-- BARU (Baris 1, kolom 1)
lcd.print("Lampu Teras Auto"); // <-- BARU
}
void loop() {
// --- LANGKAH 1: Baca Sensor (Sama) ---
int nilaiLDR = bacaLDR();
long jarakCm = bacaJarak();
// --- LANGKAH 2: Logika Inti & Serial Monitor (Sama) ---
Serial.print("LDR: " + String(nilaiLDR));
Serial.print(" | Jarak: " + String(jarakCm) + "cm");
// Pindahkan kursor LCD ke baris 2
lcd.setCursor(0, 1); // <-- BARU (Baris 2, kolom 1)
// Cek kondisi TERANG
if (nilaiLDR > ambangGelap) {
analogWrite(PIN_LED, mati);
Serial.println(" -> Status: Siang [LAMPU MATI]");
lcd.print("Siang: Mati "); // <-- BARU (beri spasi untuk hapus sisa teks)
} else {
// Cek kondisi GELAP
if (jarakCm < ambangJarakDekat) {
analogWrite(PIN_LED, terangPenuh);
Serial.println(" -> Status: Malam, Ada Orang [LAMPU TERANG]");
lcd.print("Malam: TERANG! "); // <-- BARU
} else {
analogWrite(PIN_LED, redup);
Serial.println(" -> Status: Malam, Sepi [LAMPU REDUP]");
lcd.print("Malam: Redup "); // <-- BARU
}
}
delay(500); // Jeda (Sama)
}
// --- Fungsi Pembantu (Tidak berubah) ---
int bacaLDR() {
return analogRead(PIN_LDR);
}
long bacaJarak() {
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long durasi = pulseIn(PIN_ECHO, HIGH);
long jarak = durasi * 0.034 / 2;
return jarak;
}