#include <Servo.h>
Servo Puerta;
#define BotonPuerta A0
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <Keypad.h>
char password[]="1201"; //Contraseña de 4 dígitos
char password2[]="2805"; //Contraseña de 4 dígitos
char clave[4]; //Aqui guardamos los caracteres presionados en el teclado
int conteo=0; //Esta variable se aumente en 1 x cada tecla precionada
const byte FILAS = 4; //Numero de filas del teclado que se esta usando
const byte COLUMNAS = 4; //Numero de columnas del teclado que se esta usando
//Mapa del teclado que estamos usando
char mapaTeclas[FILAS][COLUMNAS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {7, 6, 5, 4}; //Pines donde estan las filas del teclado
byte pinesColumnas[COLUMNAS] = {2, A1, A2, A3}; //Pines donde estan las columnas del teclado
Keypad teclapad = Keypad(makeKeymap(mapaTeclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS); //Inicializamos el teclado matricial
void setup()
{
Serial.begin(9600); //Puerto serie a 9600 bps
pinMode(11, OUTPUT); //Pin 2 como salida para el módulo relay
pinMode(12, OUTPUT); //Pin 12 como salida para el buzzer
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(6,0);
lcd.print("Hello :)");
delay(2000);
Inicio();
pinMode(13, OUTPUT);
Puerta.attach(3);
Puerta.write(90);
pinMode(A0, INPUT_PULLUP);
digitalWrite(13, HIGH);
}
void loop()
{
if (digitalRead(BotonPuerta)==LOW){
Abrir();
}
char tecla = teclapad.getKey(); //se alamacena en la variable "tecla" el caracter presionado
if (tecla != NO_KEY) //¿Se ha presionado alguna tecla?
{
clave[conteo]=tecla; //Almacenamos caracter por caracter en el arreglo clave[]
Serial.println(clave[conteo]); //Se muestra en el puerto serial la tecla presionada
lcd.setCursor(7+conteo,1);
lcd.print("*");
conteo=conteo+1; //Se incremente en 1 la variable conteo
if(conteo==4) //Si 4 teclas fueron presionadas se verifica si la clave es la correcta o no
{
if(clave[0]==password[0]&&clave[1]==password[1]&&clave[2]==password[2]&&clave[3]==password[3]||clave[0]==password2[0]&&clave[1]==password2[1]&&clave[2]==password2[2]&&clave[3]==password2[3])
{
bip(100);//Suena un solo bip en el buzzer indicando que la calve es correcta
//Activamos el módulo relay durante 3 segundos para la apertura de una puerta
digitalWrite(12,HIGH);
Abrir();
digitalWrite(12,LOW);
delay(3000);
conteo=0;//Seteamos la variable conteo al valor 0
}
//Si la clave es incorrecta sonará dos veces el buzzer
if (conteo!=0){
bip(100);
bip(100);
lcd.setCursor(2,1);
lcd.print("Contra incorrecta");
delay(2000);
Inicio();
}
conteo=0; //Seteamos la variable conteo al valor 0
}
}
}
//Sonido del buzzer
void bip(int demora){
digitalWrite(11, HIGH);
delay(demora);
digitalWrite(11, LOW);
delay(demora);
}
void Inicio(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingrese el Password:");
}
void Abrir(){
Puerta.write(0);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Puerta Abierta!");
delay(5000);
digitalWrite(12, LOW);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Puerta Cerrada!");
Puerta.write(90);
digitalWrite(13, HIGH);
delay(2000);
Inicio();
}