/////////////////////////////////////////
const byte filas=4; //cuatro filas
const byte columnas=4; //cuatro columnas
byte pinsFilas[filas] = {7,6,5,4};
byte pinsColumnas[columnas] = {3,2,1,0};
char teclas[filas][columnas] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad teclado = Keypad(makeKeymap(teclas), pinsFilas, pinsColumnas, filas, columnas);
/////////////////////////////////////////
char password[5];
char ingreso;
char passUser[4];
char confirmPass[4];
int i=0;
int a; //aux
int b;
const int buttonPin = A0; // Variable para el sensor magnetico
const int Rele = A3;
int buttonState = 0;
int ledverde = A1;
int ledrojo = A2;
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" BIENVENIDO");
lcd.setCursor(0, 1);
lcd.print("****************");
pinMode(ledverde, OUTPUT);
pinMode(ledrojo, OUTPUT);
pinMode(Rele, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(ledverde, HIGH);
if(EEPROM.read(4)!='Z'){
EEPROM.write(0,'4');
EEPROM.write(1,'5');
EEPROM.write(2,'6');
EEPROM.write(3,'7');
EEPROM.write(4,'Z');
}
for (int i = 0; i <= 4; i++) {
password[i] = EEPROM.read(i);
}
}
void loop() {
buttonState = digitalRead(buttonPin); // Almacena el valor de buttonPin
if (buttonState == HIGH) // Si buttonState == HIGH:
{
lcd.setCursor(0, 0);
lcd.print("**** ALERTA ****");
lcd.setCursor(0, 1);
lcd.print("-----____-------");
digitalWrite(Rele, HIGH); // enciende el foco
digitalWrite(ledverde, LOW);
digitalWrite(ledrojo, HIGH);
//delay(2000);
}else{
leerIngreso(1);
}
}
void leerIngreso(int a) {
ingreso = teclado.getKey();
if (ingreso != NO_KEY)
switch (ingreso) {
//case '*':break; checkPassword(); delay(1); break;
case 'A': // es como el "enter" para introducir la password
if(evaluar(1)==1){
correcto();
}else{
msgError();
}
reset();
break;
default: //si es un numero debe imprimirlo en el LCD y ademas guardarlo en el arreglo passUser
if(a==1){
passUser[i] = ingreso;
printPass(passUser[i], 5 + i, 1);
}
if(a==2){
confirmPass[i] = ingreso;
printPass(confirmPass[i], 5 + i, 1);
}
i++;
if (i > 3){
i = 0;
}
}
}
void correcto(){
lcd.setCursor(0, 1);
lcd.print(" DESACTIVADA ");
digitalWrite(Rele, LOW);
digitalWrite(ledverde, HIGH);
digitalWrite(ledrojo, LOW);
}
void printPass(char a, int columna, int fila ) {
lcd.setCursor(0, 1);
lcd.setCursor(columna, fila);
lcd.print(a);
delay(100);
lcd.setCursor(columna, fila);
lcd.print("*");
}
int evaluar(int a) {
int j = 0;
if (a==1){
for (int i = 0; i <= 3; i++) {
if (password[i] == passUser[i]) {
j++;
}
}
}
if(a==2){
for (int i = 0; i <= 3; i++) {
if (passUser[i] == confirmPass[i]) {
j++;
}
}
}
if (j == 4) {
return j=1;
} else {
return j=0;
}
}
void reset() {
lcd.setCursor(0, 0);
lcd.print("**** ALERTA ****");
lcd.setCursor(0, 1);
lcd.print("");
for(int i =0;i<=3;i++){
passUser[i]=NO_KEY;
confirmPass[i]=NO_KEY;
}
i=0;
}
void msgError(){
lcd.setCursor(0, 0);
lcd.print(" ERROR ");
delay(500);
}