#include <Keypad.h> //libreria
#include <LiquidCrystal_I2C.h>//libreria i2c

LiquidCrystal_I2C lcd(0x27,20,4);//creamos el objeto lcd(direccion, columna, filas)
#define buzzer 23



const byte filas=4;//tamaño filas
const byte columnas=4;//tamñao columnas

char Keys[filas][columnas]={
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'},
};

byte pinfilas[filas]={18,5,17,16}; //pines filas
byte pincolumnas[columnas]={4,0,2,15}; //pines columnas

                       //matiz,pinesfilas,pinescolumnas,tamañofilas,tamañocolumnas
Keypad teclado = Keypad(makeKeymap(Keys),pinfilas, pincolumnas,filas,columnas);

void setup() {
  pinMode(buzzer, OUTPUT);
  lcd.init();//iniciamos el display
  lcd.backlight();//encendemos la iluminacion
  lcd.setCursor(0,0);//posisicon del cursor
  lcd.println("bienvenido");//mensaje por la LCD
 Serial.begin(115200);
 //Serial.println("Bienvenido");
 delay(1000);
 lcd.clear();
}

char tecla;
String clave ="1234";
String password;

void loop() {

  //Serial.println("Ingrese la clave");
  lcd.print("clave");
  do{ //hacer mientras
    tecla=teclado.getKey(); //leemos el teclado
    if(tecla>='0' && tecla<='9'){ //tecla de 0 al 9
      tone(buzzer, 440);//tone(prin, frecuencia, duracion)
      delay(100);
      noTone(buzzer);
      lcd.println(tecla); // imprimimos lo teclado
      password+=tecla;
    }
  }while(tecla!='A');
  delay(1000);
  lcd.clear();
  if (password==clave){
    lcd.println("Usuario correcto");
  }
  else{
    lcd.println("Clave incorrecta");
  }
  password="";
  delay(5000);
  lcd.clear();
  lcd.print("clave:");
 //tecla=teclado.waitForKey(); //esperando el dato
 //limpiamos las variables
}