const int pirPin = 2; // Pin untuk sensor PIR
const int buzzerPin = 9; // Pin untuk buzzer
const int ledPin = 13; // Pin untuk LED
const int buttonPin = 8; // Pin untuk tombol pushbutton
bool alarmActive = false; // Status alarm
bool systemActive = true; // Status sistem (sensor aktif atau tidak)
bool buttonPressed = false; // Status tombol
unsigned long lastDebounceTime = 0; // Waktu terakhir tombol ditekan
unsigned long debounceDelay = 50; // Debounce delay (50 ms)
void setup() {
pinMode(pirPin, INPUT); // Set pin PIR sebagai input
pinMode(buzzerPin, OUTPUT); // Set pin buzzer sebagai output
pinMode(ledPin, OUTPUT); // Set pin LED sebagai output
pinMode(buttonPin, INPUT_PULLUP); // Set pin tombol pushbutton dengan internal pull-up resistor
Serial.begin(9600); // Mulai komunikasi serial
}
void loop() {
int motionDetected = digitalRead(pirPin); // Membaca status sensor PIR
int buttonState = digitalRead(buttonPin); // Membaca status tombol pushbutton
unsigned long currentTime = millis(); // Membaca waktu saat ini
// Debounce tombol: cek jika tombol ditekan dan jika sudah melewati waktu debounce
if (buttonState == LOW && !buttonPressed && (currentTime - lastDebounceTime > debounceDelay)) {
buttonPressed = true; // Set tombol sudah ditekan
lastDebounceTime = currentTime; // Update waktu debounce
if (systemActive) {
systemActive = false; // Nonaktifkan sistem (sensor mati)
alarmActive = false; // Matikan alarm jika aktif
noTone(buzzerPin); // Matikan buzzer
digitalWrite(ledPin, LOW); // Matikan LED
Serial.println("Sistem dimatikan. Buzzer dan LED mati."); // Mencetak pesan ke serial monitor
}
}
// Reset status tombol jika dilepas
if (buttonState == HIGH && buttonPressed) {
buttonPressed = false; // Reset status tombol
}
// Cek jika sensor aktif dan gerakan terdeteksi
if (systemActive && motionDetected == HIGH) { // Jika sensor aktif dan ada gerakan terdeteksi
if (!alarmActive) { // Jika alarm belum aktif
alarmActive = true; // Aktifkan alarm
Serial.println("Gerakan terdeteksi! Alarm aktif."); // Mencetak pesan ke serial monitor
tone(buzzerPin, 1000); // Nyalakan buzzer
digitalWrite(ledPin, HIGH); // Nyalakan LED
}
}
// Jika alarm aktif dan sistem masih aktif
if (alarmActive && systemActive) {
digitalWrite(ledPin, HIGH); // Nyalakan LED
}
// Delay kecil untuk menghindari pembacaan terlalu cepat
delay(100);
}