#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const byte Rows = 4;
const byte Cols = 3;
char keys[Rows][Cols] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[Rows] = {8, 7, 6, 5};
byte colPins[Cols] = {4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, Rows, Cols);
const char* keyList[] = {"3211"}; //, "6316", "5834", "1179", "2563", "7375", "2962", "1195", "8246", "2516", "8490", "7259", "1273", "3382", "4276"};
void setup() {
lcd.begin(16, 2);
erase();
start();
}
int keyCol = 10;
void loop() {
char keyInsert[5] = {0};
while (strlen(keyInsert) < 4) {
char key = keypad.getKey();
if (key) {
lcd.setCursor(keyCol, 1);
lcd.write('*');
++keyCol;
keyInsert[strlen(keyInsert)] = key;
}
}
if (verifyKey(keyInsert)) {
delay(350);
erase();
lcd.setCursor(4,0);
lcd.write("ACCESO");
lcd.setCursor(3,1);
lcd.write("CONCEDIDO");
delay(2500); erase();
lcd.setCursor(0,1);
lcd.print("¡Bienvenido/a!");
}
else {
delay(350);
erase();
lcd.setCursor(5,0);
lcd.write("ACCESO");
lcd.setCursor(4,1);
lcd.write("DENEGADO");
delay(2500); erase();
lcd.write("Clave");
lcd.setCursor(0,1);
lcd.write("Incorrecta");
delay(1900); erase();
lcd.write("Por favor");
lcd.setCursor(0,1);
lcd.write("intente de nuevo");
}
delay(3000);
erase();
start();
}
bool verifyKey(const char* keyIn) {
for (const auto& keyOk : keyList) {
if (strcmp(keyIn, keyOk) == 0) {
return true;
}
}
return false;
}
void erase() {
lcd.clear();
if(keyCol > 10){
keyCol = 10;
}
}
void start() {
lcd.setCursor(0,0);
lcd.write("INSERTE");
lcd.setCursor(1,1);
lcd.write("CLAVE");
lcd.setCursor(9,1);
lcd.print("{____}");
}