#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
int cuadro=7;
int fila=0;
char pass[4]={'1','6','2','A'};
char pass1[4]={'5','2','3','4'};
char pass2[4]={'4','3','2','1'};
int buena=0;
int intento=1;
int precionadas=0;
#define Ledazul A3
#define Ledrojo A4
Servo servo11;
const byte filas=4;
const byte cols=4;
char llaves[filas][cols]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte filapins[filas]={3,2,1,0};
byte colpins[cols]={7,8,5,4};
Keypad teclado=Keypad(makeKeymap(llaves),filapins,colpins,filas,cols);
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
lcd.init();
lcd.backlight();
servo11.attach(6);
//lcd.begin(20, 3);
lcd.setCursor(0,0);
lcd.print(" Bienvenido");
lcd.setCursor(0,1);
lcd.print("Digite su clave");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("D = Tecla enter");
lcd.setCursor(0,1);
lcd.print("C = Tecla borrar");
pinMode(Ledazul, INPUT_PULLUP);
pinMode(Ledrojo, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);
for(int pos=0;pos<3;pos++){
lcd.scrollDisplayRight();
delay(100);
}
for(int pos=0;pos<3;pos++){
lcd.scrollDisplayLeft();
delay(100);
}
delay(3000);
lcd.clear();
}
void loop()
{
//digitalWrite(Ledazul, HIGH);
if (digitalRead(A5) == LOW){
servo11.write(0);
digitalWrite(Ledazul, HIGH);
digitalWrite(Ledrojo, LOW);
delay(7000);
servo11.write(90);
digitalWrite(Ledazul, LOW);
digitalWrite(Ledrojo, HIGH);
}
int conteo=10;
lcd.setCursor(0,0);
lcd.print("Digite su Clave:");
char tecla=teclado.getKey();
lcd.display();
if(tecla){
precionadas++;
lcd.setCursor(cuadro,1);
if(precionadas<=4){lcd.print("*");}
if(precionadas<=4 and cuadro==7 and (pass[0]==tecla or pass1[0]==tecla or pass2[0]==tecla) ){
buena++;
}
if(precionadas<=4 and cuadro==8 and buena>0 and (pass[1]==tecla or pass1[1]==tecla or pass2[1]==tecla)){
buena++;
}
if(precionadas<=4 and cuadro==9 and buena>1 and (pass[2]==tecla or pass1[2]==tecla or pass2[2]==tecla)){
buena++;
}
if(precionadas<=4 and cuadro==10 and buena>2 and (pass[3]==tecla or pass1[3]==tecla or pass2[3]==tecla)){
buena++;
}
cuadro++;
}
if(tecla=='C'){
precionadas=0;
lcd.clear();
lcd.setCursor(0,1);
cuadro=7;
buena=0;
}
if(tecla=='D'){
precionadas=0;
if(buena==4){
lcd.clear();
servo11.write(0);
digitalWrite(Ledrojo, LOW);
digitalWrite(Ledazul, HIGH);
lcd.setCursor(2,1);
lcd.print("Puede pasar");
PORTC= 1<<0;
delay(2000);
PORTC= 0<<0;
delay(5000);
servo11.write(90);
digitalWrite(Ledrojo, HIGH);
digitalWrite(Ledazul, LOW);
lcd.clear();
cuadro=7;
buena=0;}
else{
lcd.clear();
lcd.setCursor(5,1);
lcd.print("Error");
intento++;
delay(1000);
lcd.setCursor(0,0);
lcd.print("Intento#");
lcd.setCursor(9,0);
lcd.print(intento);
delay(1000);
lcd.clear();
cuadro=7;
buena=0;
}
if(intento>3){
while(conteo!=0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Sistema");
lcd.setCursor(0,1);
lcd.print("Bloqueado");
lcd.setCursor(12,1);
lcd.print(conteo);
delay(1000);
conteo--;
}
intento=0;
lcd.clear();
}
}
}