#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int buzzerPin = 10;
const int ledPin = 12;
const byte ROWS = 4; // jumlah baris keypad
const byte COLS = 4; // jumlah kolom keypad
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; // baris keypad terhubung ke pin 2, 3, 4, dan 5 Arduino
byte colPins[COLS] = {6, 7, 8, 9}; // kolom keypad terhubung ke pin 6, 7, 8, dan 9 Arduino
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
char passcode[] = "1234"; // Passcode yang diinginkan
char user_input[5]; // Buffer untuk input dari keypad
void setup() {
lcd.begin(16, 2); // Inisialisasi LCD 16x2
lcd.backlight(); // Menyalakan backlight LCD
lcd.setCursor(0, 0); // Posisi kursor ke baris 0, kolom 0
lcd.print("Masukan PIN:"); // Tampilkan teks "Enter passcode:" di LCD
myservo.attach(11); // Attach servo ke pin 11
pinMode(buzzerPin, OUTPUT); // Atur pin buzzer sebagai output
pinMode(ledPin, OUTPUT); // Atur pin LED sebagai output
}
void loop() {
char key = keypad.getKey(); // Ambil tombol yang ditekan dari keypad
if (key) {
int len = strlen(user_input); // Hitung panjang input saat ini
if (len < 4) {
user_input[len] = key; // Tambahkan karakter ke input buffer
lcd.setCursor(len, 1); // Posisi kursor di baris 1, sesuai dengan panjang input
lcd.print('*'); // Tampilkan karakter bintang di LCD
}
if (len == 3) {
user_input[4] = '\0'; // Akhiri string dengan karakter null
if (strcmp(user_input, passcode) == 0) { // Membandingkan passcode yang dimasukkan dengan passcode yang diinginkan
lcd.clear(); // Bersihkan LCD
lcd.print("Access Granted"); // Tampilkan pesan "Access granted"
myservo.write(90); // Putar servo ke posisi 90 derajat
tone(buzzerPin, 1250); // Berikan nada frekuensi 1000 Hz
digitalWrite(ledPin, HIGH); // Nyalakan LED
delay(200); // Tunda 300ms
myservo.write(0); // Kembalikan servo ke posisi awal
noTone(buzzerPin); // Hentikan nada
digitalWrite(ledPin, LOW); // Matikan LED
lcd.clear(); // Bersihkan LCD
lcd.setCursor(0, 0); // Posisi kursor ke baris 0, kolom 0
lcd.print("Masukan PIN:"); // Tampilkan pesan "Enter passcode:"
memset(user_input, 0, sizeof(user_input)); // Hapus buffer input
} else {
lcd.clear(); // Bersihkan LCD
lcd.print("Akses Gagal"); // Tampilkan pesan "Access denied"
tone(buzzerPin, 250); // Berikan nada frekuensi 500 Hz
delay(200); // Tunda 1000ms
noTone(buzzerPin); // Hentikan nada
lcd.clear(); // Bersihkan LCD
lcd.setCursor(0, 0); // Posisi kursor ke baris 0, kolom 0
lcd.print("Masukan PIN:"); // Tampilkan pesan "Enter passcode:"
memset(user_input, 0, sizeof(user_input)); // Hapus buffer input
}
lcd.setCursor(0, 1); // Posisi kursor di baris 1
}
}
}