#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
/#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C y tamaño de la LCD
const byte filas = 4;
const byte columnas = 4;
char teclas[filas][columnas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinesFilas[filas] = { 19, 18, 5, 17 }
byte pinesColumnas[columnas] = { 16, 4, 2, 15 };
Keypad teclado = Keypad(makeKeymap(teclas), pinesFilas, pinesColumnas, filas, columnas);
const String contrasena = "1234"; // Contraseña predefinida
String contrasenaIngresada;
int intentos = 0;
const int maxIntentos = 3
bool bloqueado = false;
bool puertaAbierta = false;
unsigned long tiempoBloqueo = 0;
const int buzzer = 14;
const int botonApertura = 33;
const int botonCierre = 32;
const int rele = 13;
void setup() {
lcd.begin();
lcd.backlight();
pinMode(buzzer, OUTPUT);
pinMode(rele, OUTPUT);
pinMode(botonApertura, INPUT_PULLUP);
pinMode(botonCierre, INPUT_PULLUP);
lcd.clear();
lcd.print("Hola ingrese");
lcd.setCursor(0, 1);
lcd.print(" clave ");
}
void loop() {
char tecla = teclado.getKey();
if (tecla != NO_KEY) {
procesarTecla(tecla);
}
//boten de apertura pin 13
if (digitalRead(botonApertura) == LOW) {
lcd.clear();
lcd.print("Apertura interna");
digitalWrite(rele, HIGH);
puertaAbierta = true;
tiempoBloqueo = millis();
delay(2000);
}
//boton de cierre pin 12
if (digitalRead(botonCierre) == LOW) {
lcd.clear();
lcd.print("Cerrada interna");
digitalWrite(rele, LOW);
puertaAbierta = false;
delay(2000);
}
//tono de buzzer
if (bloqueado) {
tone(buzzer, 10);
delay(1000);
noTone(buzzer);
delay(1000);
}
if (puertaAbierta && millis() - tiempoBloqueo >= 10000) {
digitalWrite(rele, LOW);
puertaAbierta = false;
}
}
//teclado de reset de alarma
void procesarTecla(char tecla) {
if (tecla == 'C') { // Reiniciar con la letra 'C'
bloqueado = false;
intentos = 0;
contrasenaIngresada = "";
lcd.clear();
lcd.print("Hola ingrese");
lcd.setCursor(0, 1);
lcd.print("clave");
return;
}
if (bloqueado) {
return;
}
//teclado de borrar codigo
if (tecla == 'B') {
contrasenaIngresada = "";
lcd.clear();
lcd.print("Hola ingrese");
lcd.setCursor(0, 1);
lcd.print("clave");
return;
}
//teclado de acceso de contrseña
if (tecla == 'A') {
if (contrasenaIngresada == contrasena) {
lcd.clear();
lcd.print("Bienvenido a su");
lcd.setCursor(0, 1);
lcd.print("hogar");
digitalWrite(rele, HIGH);
puertaAbierta = true;
tiempoBloqueo = millis();
contrasenaIngresada = "";
intentos = 0;
delay(2000);
} else {
intentos++;
lcd.clear();
lcd.print("Incorrecto");
lcd.setCursor(0, 1);
lcd.print("Intento " + String(intentos));
contrasenaIngresada = "";
if (intentos >= maxIntentos) {
bloqueado = true;
}
delay(2000);
}
return;
}
contrasenaIngresada += tecla;
lcd.clear();
for (int i = 0; i < contrasenaIngresada.length(); i++) {
lcd.print("*");
}
}