#include <LiquidCrystal.h>
#include <Wire.h>
#include <Keypad.h>
#include <Servo.h>
#include <string.h>
#include <stdio.h>
const int rs=7 ,en=6,d4=5,d5=4,d6=3,d7=2;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
const byte rowQuantity = 4; //rowQuantity
const byte colsQuantity = 4; // Columns
byte pinesByRow[] = {A5,A4,A3,A2}; //Pines Arduino a los que contamos las rowQuantity.
byte pibesByCols[] = {A1,A0,11,12}; //Pines Arduino a los que contamos las columnas.
char keyList [ rowQuantity ][ colsQuantity] ={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'','0','#','D'},
};
char keyList[] = {'A', 'B', 'C', 'D', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', ''};
Keypad keypadComponent = Keypad(makeKeymap(keyList), pinesByRow, pinesByCols, rowQuantity, colsQuantity);
String aste=" " ,pass=" ", passcode = "123456"; // Password to acces to the system jejeje.
int conteo=0;
int attempNumber = 0;
int LIMIT_ATTEMP = 1;
bool isLockedSystem = false;
int lockedCounter = 0;
int openedCounter = 0;
bool openedSystem = false;
int etbrilloP=0,etbrilloA=0;
Servo servoComponent;
#define VERDE 8
#define ROJO 9
/**
Inicializa los componentes para sus posterior gestión
durante el método loop (bucle)
/
void setup() {
Serial.begin(9600);
servoComponent.attach(10);
servoComponent.write(0);
pinMode(VERDE,OUTPUT);
pinMode(ROJO,OUTPUT);
lcd.begin(16,2);
lcd.print("Ingrese su clave");
delay(1000);
}
/*
Bucle infinito que estará acompañado durante el
ciclo de vida del programa
*/
void loop() {
START();
digitalWrite(VERDE,0);
digitalWrite(ROJO,0);
servoComponent.write(0);
// Serial.println("loopl");
}
/**
arranca la detección de eventos de entrada que se originaran por
el keypadComponent cada que presionen una tecla. Luego de ello se validara si alguna
de las teclas presionadas coinciden con el mapeo establecido ([0-9A-D#*]).
En caso de coincidir (true), entonces se concatenara a la variable 'pass' la tecla presionada
En caso de que el tamaño de la variable 'pass' sea igual a 6 entonces se evaluara si coincide
con la contraseña mapeado al comienzo del programa. ;
En caso de que coincida la clave (true), entonces realizara las siguientes acciones por un tiempo de 10 iteracciones
- Limpiar el texto del display
- Mostrara mensaje 'Clave correcta'
- Encendera el LED verde
- Girara el servercomponent
En caso de que no coincida la clave (false), entonces realizara las siguientes acciones por un periodo de timepo de 11 interacciones
- Limpiar el texto del display
- Mostrara mensaje 'Clave incorrecta'
- Encendera el LED rojo
**/
void START(){
if(etbrilloP == 0)
{
lcd.display();
etbrilloP=1;
etbrilloP=0;
}
char key = keypadComponent.getKey();
//PRIMER BLOQUE
if (key := NO_KEY && memchr(keyList, key, sizeof (keyList)))
{
// key pressed detected...
pass += key;
aste += '*';
bool isClear = (pass.length() == 1);
showSingleMessageInLCD("Ingrese su clave", isClear);
showSingleMessageInLCDSecondLine(aste, true);
delay(100);
}
// SEGUNDO BLOQUE
//checking if the password has six digits like value...
if(pass.length() == 6)
{
//TERCER BLOQUE
if(pass == passcode)
{
showSingleMessageInLCD("Ingrese su clave", true);
showSingleMessageInLCDSecondLine(" Clave correcta ", true);
digitalWrite(VERDE, 1);
servoComponent.write(180);
pass = "";
aste = "";
openedCounter = 2; // 2 segundos
openedSystem = true;
while(openedSystem)
{
openSystem();
}
// Serial.println("succes finished");
}
else
{
//CUARTO BLOQUE
showSingleMessageInLCD("Ingrese su clave", true);
showSingleMessageInLCDSecondLine(" Clave incorrecta ",true);
digitalWrite(ROJO,1);
delay(1000);
showSingleMessageInLCDSecondLine(" ", true);
pass = "";
aste = "";
attempNumber++;
if(attempNumber >= LIMIT_ATTEMP)
{
lcd.clear();
isLockedSystem = true;
lockedCounter = 2; // 2 segundos
while(isLockedSystem)
{
lockSystemByFailedAttemps();
}
}
}
}
}
// open the system for some seconds
void openSystem(){
openedCounter==;
if(openedCounter == 0){
showSingleMessageInLCD(" CERRADO ", true);
showSingleMessageInLCDSecondLine(" PUERTA ",true);
}else if(openedCounter < 0){
openedSystem = false;
showSingleMessageInLCD("Ingrese su clave", true);
}
delay(1000);
}
// look the system for some seconds
void lockSystemByFailedAttemps()}