#include <Keypad.h>
// ------------------ PIN SETUP ------------------
const int pirPin = 2; // Sensor PIR di pin 2
const int buzzerPin = 3; // Buzzer di pin 3
const int ledPin = 13; // LED alarm di pin 13
// ------------------ PASSWORD ------------------
const String password = "1234"; // Password yang harus dimasukkan
String input = ""; // Menyimpan input dari keypad
// ------------------ KEYPAD SETUP ------------------
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 10, 11, 12}; // Baris keypad ke pin digital 5-8
byte colPins[COLS] = {5, 6, 7, 8}; // Kolom keypad ke pin digital 9-12
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// ------------------ STATUS ------------------
bool alarmOn = false;
void setup() {
pinMode(pirPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Sistem Siap");
}
void loop() {
// Baca sensor gerak
int motion = digitalRead(pirPin);
// Jika gerakan terdeteksi dan alarm belum aktif
if (motion == HIGH && !alarmOn) {
alarmOn = true;
Serial.println("Gerakan terdeteksi! Alarm aktif.");
}
// Jika alarm aktif, nyalakan LED dan buzzer
if (alarmOn) {
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
Serial.println("Masukkan password untuk mematikan alarm.");
// Baca input dari keypad
char key = keypad.getKey();
if (key) {
Serial.print("Tombol ditekan: ");
Serial.println(key);
if (key == '#') { // Jika tekan '#' dianggap konfirmasi
Serial.print("Input: ");
Serial.println(input); // Debug, tampilkan input
if (input.equals(password)) {
Serial.println("Password benar. Alarm dimatikan.");
alarmOn = false;
digitalWrite(buzzerPin, LOW);
digitalWrite(ledPin, LOW);
} else {
Serial.println("Password salah!");
}
input = ""; // Reset input setelah tekan #
} else {
input += key; // Tambah input jika bukan #
}
}
} else {
// Jika alarm mati, pastikan LED dan buzzer mati
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
}
}