const int ldr = A0; // pin untuk LDR (sensor cahaya)
const int led = 12; // atau bisa digantikan dengan relay agar bisa menggunakan lampu asli (mengontrol arus AC dengan arus DC)
const int suara = A1; // pin untuk sensor suara
const int tombol = 2; // Pin untuk tombol (bisa pakai push button)
int batasSuara = 500; // Batas suara wajar untuk tepukan tangan
boolean on = HIGH;
boolean off = LOW;
boolean status = false; // penanda apakah lampu nyala/mati
boolean kontrolManual = false; // Status kontrol manual dari tombol atau suara
int bacaCahaya;
int bacaSuara;
int bacaTombol;
unsigned long debounceTerakhir = 0; // Waktu terakhir tombol ditekan
unsigned long delayDebounce = 50; // Debounce time untuk tombol
// fungsi untuk menyalakan lampu
void lampuNyala() {
digitalWrite(led, on);
status = true;
}
// fungsi untuk mematikan lampu
void lampuMati() {
digitalWrite(led, off);
status = false;
}
// set up awal
void setup() {
Serial.begin(9600);
pinMode(ldr, INPUT);
pinMode(led, OUTPUT);
pinMode(suara, INPUT);
pinMode(tombol, INPUT);
}
void loop() {
// baca input
bacaCahaya = analogRead(ldr);
bacaSuara = analogRead(suara);
bacaTombol = digitalRead(tombol);
// Deteksi perubahan pada tombol dengan debounce
if (bacaTombol == HIGH && (millis() - debounceTerakhir) > delayDebounce) {
kontrolManual = !kontrolManual; // Mengubah status kontrol manual
if (kontrolManual) {
lampuNyala();
} else {
lampuMati();
}
debounceTerakhir = millis();
}
// Pengaturan lampu berdasarkan sensor cahaya jika tidak dalam kontrol manual
if (!kontrolManual) {
if (bacaCahaya <= 100) {
lampuNyala();
} else {
lampuMati();
}
}
// Pengaturan lampu berdasarkan sensor suara, hanya saat tidak dalam kontrol manual
if (bacaSuara >= batasSuara) {
kontrolManual = true; // Aktifkan kontrol manual saat suara terdeteksi
if (status) {
lampuMati();
} else {
lampuNyala();
}
delay(500); // Penundaan untuk menghindari toggling cepat
}
}