#include <Keypad.h>
//*********************************************************************
//keypad_4X4
//Specified pins are for the Arduino UNO R3
//This code is in the public domain.
//*********************************************************************
// Variables del programa
#define TAM 11
#define STR_NULL ""
String claves[] = {
"12A4",
"79BC",
"3A4D",
"5086",
STR_NULL
};
char clave_ingresada[TAM];
int i;
char tecla;
// Estados
#define SOLICITUD_CLAVE 0
#define INGRESO_CLAVE 1
#define VALIDACION 2
#define ACCESO 30
#define NO_ACCESO 40
int estado;
// ----------------------------------------
bool validar_clave(String clave_ingresada, String claves_sistema[]);
//-----------------------------------------
#define row1 11
#define row2 10
#define row3 9
#define row4 8
#define col1 7
#define col2 6
#define col3 5
#define col4 4
const byte ROWS = 4; /* four rows */
const byte COLS = 4; /* four columns */
/* define the symbols on the buttons of the keypads */
char keyMap[ROWS][COLS] = {
{'1','2','4','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {row1, row2, row3, row4}; /* connect to the row pinouts of the keypad */
byte colPins[COLS] = {col1, col2, col3, col4}; /* connect to the column pinouts of the keypad */
/* initialize an instance of class NewKeypad */
Keypad teclado = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
Serial.println("Prueba teclado");
// Inicializar variables
i = 0;
estado = SOLICITUD_CLAVE;
char X[] = "hola";
String Xs(X);
String Y = "holx";
Serial.println(Xs == Y);
}
void loop() {
switch(estado) {
case ACCESO:
Serial.println("Estado: Acceso");
Serial.println("Acceso consedido");
//delay(3000);
estado = SOLICITUD_CLAVE;
break;
case SOLICITUD_CLAVE:
Serial.print("Digite la clave de acceso: ");
estado = INGRESO_CLAVE;
break;
case INGRESO_CLAVE:
// Serial.println("Estado: Ingreso clave");
tecla = teclado.getKey();
// Clave
if(tecla){
if(tecla != '#') {
Serial.print(tecla);
clave_ingresada[i] = tecla;
i++;
}
else {
clave_ingresada[i] = '\0';
// Serial.println(clave_ingresada);
i = 0;
estado = VALIDACION;
}
}
break;
case VALIDACION:
Serial.println("Estado: Validacion");
// Clave
String clave_str(clave_ingresada);
if(validar_clave(clave_str, claves)) {
Serial.println("Acceso consedido");
estado = ACCESO;
}
else {
Serial.println("Acceso no consedido");
estado = NO_ACCESO;
}
Serial.println(estado);
// estado = SOLICITUD_CLAVE;
break;
case NO_ACCESO:
Serial.println("Rechazo");
Serial.println("Acceso rechazado");
//delay(3000);
estado = INGRESO_CLAVE;
break;
}
}
bool validar_clave(String clave_ingresada, String claves_sistema[]) {
int i = 0;
// Serial.println(clave_ingresada);
bool resultado = false;
while(claves_sistema[i] != NULL) {
// Serial.println(claves_sistema[i]);
if(clave_ingresada == claves_sistema[i]) {
resultado = true;
break;
}
i++;
}
// Serial.println(resultado);
return resultado;
}