#include <Wire.h> // Librería para comunicación I2C
#include <LiquidCrystal_I2C.h> // Librería para LCD con interfaz I2C
#include <Keypad.h> // Librería para leer el teclado matricial
// --- CONFIGURACIÓN DEL LCD ---
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C (0x27 o 0x3F) y tamaño del LCD 16x2
// --- CONFIGURACIÓN DEL LED ---
#define ledVerde 13 // LED conectado al pin digital 13
// --- CONFIGURACIÓN DEL TECLADO 4x4 ---
const byte FILAS = 4; // Número de filas
const byte COLUMNAS = 4; // Número de columnas
// Mapa de las teclas (ajústalo si tu keypad tiene otra disposición)
char teclas[FILAS][COLUMNAS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Pines del Arduino conectados a las filas y columnas del keypad
byte pinesFilas[FILAS] = {9, 8, 7, 6};
byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2};
// Creación del objeto teclado
Keypad teclado = Keypad(makeKeymap(teclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
// --- VARIABLES DE CONTRASEÑA ---
String clave = "1234"; // Contraseña correcta
String entrada = ""; // Lo que el usuario va escribiendo
void setup() {
lcd.init(); // Inicializa el LCD
lcd.backlight(); // Enciende la luz de fondo
pinMode(ledVerde, OUTPUT);
digitalWrite(ledVerde, LOW); // Apaga el LED al inicio
// Mensaje inicial
lcd.setCursor(0, 0);
lcd.print("Clave: "); // Muestra la palabra "Clave:" en la primera línea
}
void loop() {
char tecla = teclado.getKey(); // Lee si se ha presionado una tecla
if (tecla) { // Si se presionó alguna tecla
if (tecla == '#') { // '#' se usa para confirmar la clave
lcd.clear();
if (entrada == clave) { // Si la clave es correcta
lcd.setCursor(0, 0);
lcd.print("Correcto!");
digitalWrite(ledVerde, HIGH); // Enciende el LED
} else {
lcd.setCursor(0, 0);
lcd.print("Incorrecto!");
digitalWrite(ledVerde, LOW); // Apaga el LED
}
delay(2000); // Muestra el mensaje 2 segundos
lcd.clear();
lcd.print("Clave: "); // Regresa al modo de ingreso
entrada = ""; // Limpia la entrada anterior
}
else if (tecla == '*') { // '*' borra toda la entrada
entrada = "";
lcd.clear();
lcd.print("Clave: ");
}
else { // Cualquier otro carácter se agrega a la entrada
entrada += tecla;
lcd.setCursor(7, 0); // Posición donde se empieza a escribir
lcd.print(entrada); // Muestra la clave escrita
}
}
}