#include <Wire.h>
#include <Adafruit_LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>
Servo myServo;
const int buzzerPin = 2; // Pin para el buzzer
const int servoPin = 5; // Pin para el servo
const int buttonPin = 0; // Pin para el botón de desbloqueo
// Define el teclado matricial
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 12, 13, 15}; // Conectar a los pines ROW0, ROW1, ROW2, ROW3 del teclado
byte colPins[COLS] = {27, 26, 25, 33}; // Conectar a los pines COL0, COL1, COL2, COL3 del teclado
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
Adafruit_LiquidCrystal lcd(0);
const String codigoCorrecto = "1234"; // Cambia a tu código deseado
String codigoIngresado = "";
int intentosFallidos = 0;
bool sistemaBloqueado = false;
void setup() {
lcd.begin(16, 2);
myServo.attach(servoPin);
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
lcd.print("Sistema de");
lcd.setCursor(0, 1);
lcd.print("Seguridad");
delay(2000);
lcd.clear();
lcd.print("Ingrese el");
lcd.setCursor(0, 1);
lcd.print("codigo");
}
void loop() {
if (!sistemaBloqueado) {
char key = keypad.getKey();
if (key) {
procesarTecla(key);
}
// Verificar el estado del botón de desbloqueo
if (digitalRead(buttonPin) == LOW) {
desbloquearSistema();
}
} else {
lcd.clear();
lcd.print("Sistema");
lcd.setCursor(0, 1);
lcd.print("Bloqueado");
delay(2000);
lcd.clear();
lcd.print("Ingrese el");
lcd.setCursor(0, 1);
lcd.print("codigo");
sistemaBloqueado = false;
}
}
void procesarTecla(char key) {
codigoIngresado += key;
lcd.setCursor(codigoIngresado.length() - 1, 1);
lcd.print('*');
// Verificar si se ingresó el código completo
if (codigoIngresado.length() == codigoCorrecto.length()) {
if (codigoIngresado == codigoCorrecto) {
desbloquearSistema();
girarServo();
} else {
intentosFallidos++;
if (intentosFallidos >= 3) {
bloquearSistema();
} else {
// Código incorrecto, reproducir sonido del buzzer
tone(buzzerPin, 1000, 500);
delay(1000);
lcd.clear();
lcd.print("Codigo");
lcd.setCursor(0, 1);
lcd.print("incorrecto");
delay(1000);
lcd.clear();
lcd.print("Ingrese el");
lcd.setCursor(0, 1);
lcd.print("codigo");
codigoIngresado = "";
}
}
}
}
void girarServo() {
myServo.write(180);
delay(2000);
myServo.write(0);
delay(1000);
lcd.clear();
lcd.print("Acceso");
lcd.setCursor(0, 1);
lcd.print("Concedido");
delay(2000);
lcd.clear();
lcd.print("Ingrese el");
lcd.setCursor(0, 1);
lcd.print("codigo");
codigoIngresado = "";
}
void desbloquearSistema() {
sistemaBloqueado = false;
lcd.clear();
lcd.print("Sistema");
lcd.setCursor(0, 1);
lcd.print("Desbloqueado");
delay(2000);
lcd.clear();
lcd.print("Ingrese el");
lcd.setCursor(0, 1);
lcd.print("codigo");
codigoIngresado = "";
}
void bloquearSistema() {
sistemaBloqueado = true;
lcd.clear();
lcd.print("Sistema");
lcd.setCursor(0, 1);
lcd.print("Bloqueado");
delay(2000);
lcd.clear();
lcd.print("Ingrese el");
lcd.setCursor(0, 1);
lcd.print("codigo");
codigoIngresado = "";
intentosFallidos=0;
}