#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C dan ukuran LCD
// Inisialisasi keypad
const byte ROWS = 4; // 4 baris
const byte COLS = 4; // 4 kolom
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 9, 8, 7, 6 }; // Koneksi baris keypad ke pin Arduino
byte colPins[COLS] = { 5, 4, 3, 2 }; // Koneksi kolom keypad ke pin Arduino
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Pin buzzer
const int buzzerPin = 11;
// Inisialisasi servo
Servo myServo;
const int servoPin = 10;
// Kode PIN yang benar
const String correctPin = "1111";
// Variabel untuk menyimpan input PIN
String enteredPin = "";
const int ledr = 12;
const int ledh = 13;
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Masukkan PIN:");
// Inisialisasi buzzer
pinMode(buzzerPin, OUTPUT);
pinMode(ledr, OUTPUT);
pinMode(ledh, OUTPUT);
// Inisialisasi servo
myServo.attach(servoPin);
myServo.write(0); // Posisi awal servo (terkunci)
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '*') {
// Tombol * ditekan, hapus input PIN
enteredPin = "";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan PIN:");
} else if (key == '#') {
// Tombol # ditekan, periksa PIN
if (enteredPin == correctPin) {
// PIN benar
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Brankas Terbuka");
lcd.setCursor(0, 1);
lcd.print("Selamat!");
digitalWrite(ledr, 0);
digitalWrite(ledh, 1);
openSafe();
} else {
// PIN salah
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kode Salah!");
lcd.setCursor(0, 1);
lcd.print("Coba Lagi");
digitalWrite(ledr, 1);
digitalWrite(ledh, 0);
wrongPin();
}
// Reset enteredPin
enteredPin = "";
delay(2000); // Tunggu 2 detik sebelum meminta PIN lagi
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan PIN:");
} else {
// Menampilkan karakter yang ditekan di LCD
lcd.setCursor(enteredPin.length(), 1);
lcd.print(key);
// Menambahkan karakter ke enteredPin
enteredPin += key;
}
}
}
void openSafe() {
// Aktifkan buzzer dengan nada tinggi
tone(buzzerPin, 1000);
delay(500);
noTone(buzzerPin);
// digitalWrite(ledh, 1);
// digitalWrite(ledr, 0);
// Putar servo untuk membuka brankas
myServo.write(90); // Posisi terbuka
delay(5000); // Tunggu 5 detik
myServo.write(0); // Kembali ke posisi tertutup
}
void wrongPin() {
// Aktifkan buzzer dengan nada rendah
tone(buzzerPin, 500);
delay(1000);
noTone(buzzerPin);
// digitalWrite(ledr, 1);
// digitalWrite(ledh, 0);
}