#include <Keypad.h>
#include <Servo.h>
// Definisikan pin untuk servo, keypad, dan buzzer
const int servoPin = 11;
const int buzzerPin = 10;
const int ledPin = 13;
const int buttonpin = 12;
// Password yang benar
const String password = "1234";
// Inisialisasi keypad
const byte ROW_NUM = 4; // 4 baris
const byte COL_NUM = 4; // 4 kolom
char keys[ROW_NUM][COL_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6};
byte pin_column[COL_NUM] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COL_NUM);
// Inisialisasi servo
Servo lockServo;
// Variabel untuk password input
String inputPassword = "";
// Variabel untuk pushbutton
int buttonState = 0;
int lastbuttonState = 0;
void setup() {
// Inisialisasi pin
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
// Setup servo
lockServo.attach(servoPin);
lockServo.write(0); // posisi terkunci
Serial.begin(9600); // Untuk debugging
// Menyala LED pada awal
digitalWrite(ledPin, HIGH); // LED menyala (indikasi sistem aktif)
}
void loop() {
char key = keypad.getKey();
if (key) {
// Menambahkan input karakter ke password
if (key == '#') {
// Jika tombol "#" ditekan, cek password
if (inputPassword == password) {
// Password benar
openLock();
} else {
// Password salah
wrongPassword();
}
inputPassword = ""; // Reset input password setelah pengecekan
}
else if (key == '*') {
// Reset password jika "*" ditekan
inputPassword = "";
}
else {
// Menambahkan karakter ke password input
inputPassword += key;
}
}
// Mengecek pushbutton untuk membuka pintu secara manual
buttonState= digitalRead(buttonpin);
if (buttonState == HIGH && lastbuttonState == LOW) {
delay (200);
lockServo.write(90);
tone(buzzerPin, 1000, 500);
delay (3000);
lockServo.write(0);
}
lastbuttonState = buttonState;
}
void openLock() {
// Jika password benar, buka kunci
Serial.println("Password benar, membuka kunci.");
digitalWrite(ledPin, LOW); // LED mati
lockServo.write(90); // Posisikan servo ke 90 derajat (membuka kunci)
tone(buzzerPin, 1000, 500); // Bunyi buzzer (tone 1000Hz selama 500ms)
delay(5000); // Waktu membuka kunci (3 detik)
lockServo.write(0); // Kunci kembali (posisi 0)
digitalWrite(ledPin, HIGH); // LED kembali menyala
}
void wrongPassword() {
// Jika password salah, beri feedback
Serial.println("Password salah.");
tone(buzzerPin, 500, 1000); // Bunyi buzzer (tone 500Hz selama 1000ms)
delay(2000); // Waktu untuk buzzer berbunyi
}