#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'.','0','=','/'}
};
byte colPins[COLS] = {9 ,8 ,7 ,6 };
byte rowPins[ROWS] = {13 ,12 ,11 , 10 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char stringAngka[7]; // Ukuran stringAngka menjadi 6
int indexKeypad = 0;
const char *password = "412120"; // Password yang diharapkan
const int buzzerPin = 2; // Ubah pin buzzer ke pin 4
void setup(){
Serial.begin(9600);
lcd.init();
lcd.begin(16,2);
lcd.backlight();
lcd.setCursor(4,0);
lcd.print("Tutorial");
lcd.setCursor(0,1);
lcd.print("Keypad 4x4 & LCD");
delay(2000);
lcd.clear();
pinMode(buzzerPin, OUTPUT); // Set pin buzzer sebagai OUTPUT
}
void loop(){
char key = keypad.getKey();
if (key) {
Serial.println(key);
switch (key)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '+':
case '-':
case '*':
case '=':
case '.':
if (indexKeypad < 6) { // Periksa apakah indeks kurang dari 5
stringAngka[indexKeypad++] = key;
lcd.setCursor(15,1);
lcd.print(key);
}
if (indexKeypad == 6) {
// Cek apakah stringAngka sama dengan password yang diharapkan
if (strcmp(stringAngka, password) == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Password Benar");
digitalWrite(buzzerPin, HIGH); // Aktifkan buzzer
delay(4000); // Tunggu selama 1 detik
digitalWrite(buzzerPin, LOW); // Matikan buzzer
delay(1000); // Tunggu sebentar sebelum melanjutkan
lcd.clear();
} else {
lcd.setCursor(0, 1);
lcd.print("Password Salah");
delay(1000); // Tunggu sebentar sebelum melanjutkan
lcd.clear();
}
// Reset input
indexKeypad = 0;
memset(stringAngka, 0, sizeof(stringAngka));
}
break;
}
}
}