#include <LiquidCrystal_I2C.h> // Incluir la libreria antes instalada
// Configurar el tiempo de LCD que se va a usar con la intrucción
int Columnas = 16;
int Filas = 2;
LiquidCrystal_I2C lcd(0x27, Columnas, Filas); // configuración del LCD a usar(dirección, Columnas, filas)
int fila1=19; // filas del teclado matricial
int fila2=18;
int fila3=5;
int fila4=17;
int col1=16; // columnas del teclado matricial
int col2=4;
int col3=2;
int col4=15;
int LED1=13; //Declaración del puerto en cada posicion para cada led
int LED2=12;
int LED3=14;
int key;
int contador=2;
int tecla_leida;
int teclado_listo;
int rebote(int tecla);
const String password = "521628";
String inputPassword = "";
int intentos = 0;
const int intentosMaximos = 3;
void setup() {
Serial.begin(9600);
lcd.init(); // Se inicializa el LCD
lcd.backlight(); // Controla si se enciende o no la Luz de fondo
pinMode(fila1, OUTPUT); // Cambiado de INPUT a OUTPUT
pinMode(fila2, OUTPUT);
pinMode(fila3, OUTPUT);
pinMode(fila4, OUTPUT);
pinMode(col1, INPUT); // Cambiado de OUTPUT a INPUT
pinMode(col2, INPUT);
pinMode(col3, INPUT);
pinMode(col4, INPUT);
pinMode(LED1, OUTPUT); // Declaracion de pin para cada salida
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop(){
lcd.setCursor(2,0);
lcd.print("Por:");
lcd.setCursor(0,1);
lcd.print("Sergio Y Victor");
delay(2000);
lcd.clear();
lcd.setCursor(1,0); // se coloca el curso en la primera posición
lcd.print("** LCD 12C **"); // se imprime el mensaje en el LCD
lcd.setCursor(1,1);
lcd.print("***Teclado***");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingresar Clave:");
lcd.setCursor(0,1);
while(1){
key=teclado();
if (key!=55){
if (key != '*') { // Si la tecla presionada no es "*", entonces se agrega a la contraseña
inputPassword += key; // Agrega la tecla presionada a la variable inputPassword
lcd.setCursor(inputPassword.length()-1,1); // Establece la posición del cursor en la columna actual y la fila 1
lcd.print("*"); // Imprime el asterisco en pantalla
}
if (inputPassword.length() == 6) { // Si se han ingresado 6 dígitos para la contraseña
delay(500);
lcd.clear(); // Espera 500ms para que el usuario suelte el último botón presionado
if (inputPassword == password) { // Si la contraseña ingresada es igual a la contraseña predeterminada
digitalWrite(LED1, HIGH); // Enciende el LED verde
lcd.clear(); // Limpia la pantalla del LCD
lcd.setCursor(0,0); // Establece la posición del cursor en la columna 0 y la fila 0
lcd.print("Clave Correcta");
lcd.setCursor(0,1); // Establece la posición del cursor en la columna 0 y la fila 0
lcd.print("Tototosususu");
delay(20000);
}
else { // Si la contraseña ingresada es diferente a la contraseña predeterminada
digitalWrite(LED3, HIGH); // Enciende el LED rojo
lcd.clear(); // Limpia la pantalla del LCD
lcd.setCursor(0,0); // Establece la posición del cursor en la columna 0 y la fila 0
lcd.print("Clave Incorrecta");
lcd.setCursor(0,1); // Establece la posición del cursor en la columna 0 y la fila 0
lcd.print(intentos+1);
lcd.setCursor(3,1); // Establece la posición del cursor en la columna 0 y la fila 0
lcd.print("de 3 intentos");
delay(1000);
intentos++;
if (intentos >= intentosMaximos) {
lcd.clear();
lcd.print("!!!!SISTEMA!!!!");
lcd.setCursor(0,1);
lcd.print("!!!BLOQUEADO!!!");
digitalWrite(LED2, HIGH);
while (true) {
digitalWrite(LED1, HIGH);
delay(500);
digitalWrite(LED1, LOW);
digitalWrite(LED3, HIGH);
delay(500);
digitalWrite(LED3, LOW);
}
} // Imprime en pantalla "Clave Incorrecta"
}
inputPassword = ""; // Reinicia la variable inputPassword
delay(1000); // Espera 1 segundo antes de continuar
lcd.clear(); // Limpia la pantalla del LCD
lcd.setCursor(0,0); // Establece la posición del cursor en la columna 0 y la fila 0
lcd.print("Ingresar clave: "); // Imprime en pantalla el mensaje "Ingrese clave:"
digitalWrite(LED1, LOW); // Apaga el LED verde
digitalWrite(LED3, LOW);
}
}
}
}
int teclado()
{
int valor=55;
digitalWrite(fila1, HIGH);
digitalWrite(fila2, LOW);
digitalWrite(fila3, LOW);
digitalWrite(fila4, LOW);
delay(50);
if(digitalRead(col1)==HIGH) valor=1;
if(digitalRead(col2)==HIGH) valor=2;
if(digitalRead(col3)==HIGH) valor=3;
if(digitalRead(col4)==HIGH) valor=15;
digitalWrite(fila1, LOW);
digitalWrite(fila2, HIGH);
digitalWrite(fila3, LOW);
digitalWrite(fila4, LOW);
delay(50);
if(digitalRead(col1)==HIGH) valor=4;
if(digitalRead(col2)==HIGH) valor=5;
if(digitalRead(col3)==HIGH) valor=6;
if(digitalRead(col4)==HIGH) valor=14;
digitalWrite(fila1, LOW);
digitalWrite(fila2, LOW);
digitalWrite(fila3, HIGH);
digitalWrite(fila4, LOW);
delay(50);
if(digitalRead(col1)==HIGH) valor=7;
if(digitalRead(col2)==HIGH) valor=8;
if(digitalRead(col3)==HIGH) valor=9;
if(digitalRead(col4)==HIGH) valor=13;
digitalWrite(fila1, LOW);
digitalWrite(fila2, LOW);
digitalWrite(fila3, LOW);
digitalWrite(fila4, HIGH);
delay(50);
if(digitalRead(col1)==HIGH) valor=10;
if(digitalRead(col2)==HIGH) valor=0;
if(digitalRead(col3)==HIGH) valor=11;
if(digitalRead(col4)==HIGH) valor=12;
teclado_listo=rebote(valor);
if (teclado_listo==1) return(valor);
else return(55);
}
int rebote(int tecla){
int bandera;
if (tecla==55) return(0);
else {
contador--;
if(contador==0){
contador=4;
bandera=1;
tecla_leida=tecla;
}
else{
bandera=0;
}
return(bandera);
}
}