#include <Keypad.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','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinrows [rows] = {13, 12, 14, 27};
byte pincols [cols] = {26, 25, 33, 32};
Keypad costumKeypad = Keypad (makeKeymap(keys),pinrows,pincols,rows,cols);
char lastKey = ' ';
int sequenceCount = 0;
int errorCount = 0;
unsigned long lastErrorTime = 0;
#define pinled 19
void setup() {
Serial.begin(9600);
pinMode(pinled, OUTPUT);
lcd.init(); // initialize the lcd
lcd.backlight(); // turn on backlight
lcd.print("Selamat datang!");
}
void loop() {
char key = costumKeypad.getKey();
if (key) {
Serial.println(key);
if (millis() - lastErrorTime >= 1000) {
errorCount = 0;
}
if (key == '3' && lastKey == ' ') {
sequenceCount = 1;
} else if (sequenceCount == 1 && key == '4') {
sequenceCount = 2;
} else if (sequenceCount == 2 && key == '7') {
sequenceCount = 3;
} else if (sequenceCount == 3 && key == '3') {
sequenceCount = 4;
digitalWrite(pinled, HIGH);
sequenceCount = 0;
errorCount = 0;
} else {
sequenceCount = 0;
errorCount++;
lastErrorTime = millis();
if (errorCount >= 4) {
lcd.setCursor(0, 1);
lcd.autoscroll();
lcd.print("Terlalu banyak kesalahan.");
Serial.println("Terlalu Banyak Mencoba Silahkan tunggu untuk Mencoba kembali.");
digitalWrite(pinled, LOW);
delay (1000);
}
}
lastKey = key;
}
}