#include <Servo.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); 
const int filas=4;
const int columnas=4;
char keys[filas][columnas]={
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte pinesFila[filas]={9,8,7,6};
byte pinesColumna[columnas]={5,4,3,2};

Keypad teclado=Keypad(makeKeymap(keys), pinesFila, pinesColumna, filas, columnas);

String pass="202323";
String passIngresado;
Servo servo_10;
int intentos = 0;

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Ingrese codigo:");
  Serial.begin(9600);
  pinMode(11,OUTPUT);
  servo_10.attach(10,500,2500);
  servo_10.write(0);
}

void loop()
{
  char teclaPrecionada=teclado.getKey();
  if(teclaPrecionada){
    if(teclaPrecionada>='0' && teclaPrecionada<='9' ){
      passIngresado=passIngresado+teclaPrecionada;
      tone(11,1000,100);
      Serial.println(passIngresado);
      lcd.setCursor(0,1);
      lcd.print(passIngresado);
    }
    else{
      if(passIngresado.length()>0){
        if( passIngresado==pass ){
          Serial.println(" Acceso perimitido");
          servo_10.write(90);
          tone(11,500,1000);
        }
        else{
          Serial.println(" Acceso denegado");
          tone(11,100,500);
          servo_10.write(0);
          intentos++;
          if(intentos >= 3){
            lcd.clear();
            lcd.print("Intentos agotados");
            while(1){}
          }
        }
        passIngresado="";
      }
      else{
        Serial.println(" Acceso denegado");
        tone(11,100,500);
        servo_10.write(0);
        intentos++;
        if(intentos >= 3){
          lcd.clear();
          lcd.print("Intentos agotados");
          while(1){}
        }
      }
    }
  }
}