// === Definisi Pin ===
#define PIN_TRIG 9
#define PIN_ECHO 10
#define PIN_LDR A0
#define PIN_LED 11 // WAJIB pin PWM (ada tanda ~)
// === Ambang Batas (REVISI) ===
int ambangBatasGelap = 507; // REVISI: Batas tengah (1015 / 2)
int batasSangatDekat = 20; // 20 cm
// === Pengaturan Kecerahan ===
int terangPenuh = 255;
int redup = 30; // Cukup redup agar terlihat bedanya
int mati = 0;
void setup() {
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
analogWrite(PIN_LED, mati);
}
void loop() {
// --- LANGKA 1: Baca Semua Sensor ---
int nilaiLDR = bacaLDR();
long jarakCm = bacaJarak();
// --- LANGKA 2: Logika Inti & Serial Monitor ---
Serial.print("LDR: " + String(nilaiLDR));
Serial.print(" | Jarak: " + String(jarakCm) + "cm");
// === LOGIKA DIPERBAIKI (LOGIKA B: TERANG = KECIL) ===
// (Jika nilai LDR KECIL, berarti TERANG)
if (nilaiLDR < ambangBatasGelap) { // JIKA NILAI LDR < 507
// Skenario 1: Siang Hari (Terang)
analogWrite(PIN_LED, mati);
Serial.println(" -> Status: Siang [LAMPU MATI]");
} else { // JIKA NILAI LDR > 507
// Skenario 2: Gelap (Malam Hari)
if (jarakCm <= batasSangatDekat) {
// Skenario 2a: Malam & ZONA DEKAT (0-20 cm)
analogWrite(PIN_LED, terangPenuh);
Serial.println(" -> Status: Malam, Zona Dekat [LAMPU TERANG]");
} else {
// Skenario 2b: Malam & ZONA JAUH (> 20 cm)
analogWrite(PIN_LED, redup);
Serial.println(" -> Status: Malam, Area Luar [LAMPU REDUP]");
}
}
delay(500);
}
// --- Fungsi Pembantu (Sama) ---
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;
}