#include <Keypad.h>
#include <Servo.h>
// Konfigurasi keypad
const byte ROWS = 4; // Jumlah baris pada keypad
const byte COLS = 4; // Jumlah kolom pada keypad
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {12, 11, 10, 9}; // Pin baris pada Arduino
byte colPins[COLS] = {8, 7, 6, 5}; // Pin kolom pada Arduino
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Konfigurasi servo
Servo myServo;
int servoPin = 4; // Pin servo
// Konfigurasi LED dan buzzer
int ledPin = 2; // Pin LED
int buzzerPin = 13; // Pin buzzer
// Variabel untuk menyimpan password dan status sistem
String inputPassword = ""; // Input dari pengguna
String correctPassword = "1234"; // Password yang benar
bool isUnlocked = false; // Status kunci (false = terkunci, true = terbuka)
void setup() {
// Inisialisasi
myServo.attach(servoPin);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Memulai posisi servo (terkunci)
myServo.write(0); // Servo pada posisi awal (0 derajat)
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey(); // Membaca input keypad
if (key) { // Jika ada tombol yang ditekan
Serial.println(key); // Tampilkan tombol yang ditekan di Serial Monitor
// Jika tombol adalah '#', reset input
if (key == '#') {
inputPassword = ""; // Reset input password
Serial.println("Input cleared");
}
// Jika tombol adalah '*', periksa password
else if (key == '*') {
if (inputPassword == correctPassword) {
if (!isUnlocked) {
// Membuka kunci
Serial.println("Unlocked!");
isUnlocked = true;
// Aksi jika password benar (membuka kunci)
digitalWrite(ledPin, HIGH); // Nyalakan LED
digitalWrite(buzzerPin, HIGH); // Nyalakan buzzer
myServo.write(90); // Putar servo ke 90 derajat
delay(1000); // Tahan buzzer selama 1 detik
digitalWrite(buzzerPin, LOW); // Matikan buzzer
} else {
// Menutup kunci
Serial.println("Locked!");
isUnlocked = false;
// Aksi jika password benar (menutup kunci)
digitalWrite(ledPin, LOW); // Matikan LED
digitalWrite(buzzerPin, HIGH); // Buzzer tanda kunci
myServo.write(0); // Servo kembali ke posisi awal (0 derajat)
delay(500); // Tahan buzzer selama 0.5 detik
digitalWrite(buzzerPin, LOW); // Matikan buzzer
}
} else {
// Jika password salah
Serial.println("Password Incorrect!");
// Aksi jika password salah
for (int i = 0; i < 3; i++) { // Buzzer berbunyi 3 kali
digitalWrite(buzzerPin, HIGH);
delay(200);
digitalWrite(buzzerPin, LOW);
delay(200);
}
}
inputPassword = ""; // Reset password setelah dicek
}
// Jika tombol adalah angka, tambahkan ke input password
else {
inputPassword += key; // Tambahkan karakter ke password
Serial.println(inputPassword); // Cetak input sementara
}
}
}