Buenas tardes!
Llevo un tiempo liado con un modesto proyecto que me permita abrir la típica puerta con cerradura eléctrica mediante un sistema de control de acceso RFID-RC522.... CONSEGUIDO
Una vez solucionado esto he querido añadirle un teclado matricial 4 x 3, para poder abrir la puerta también tecleando una secuencia o password determinado.... CONSEGUIDO A MEDIAS.
Ahora mismo mi problema es que no se como "capturar" más de un carácter con el teclado para crear una secuencia de, por ejemplo, 4 caracteres y poder compararla con otros 4 que definiría como "clave de acceso".
Este es el código que llevo escrito de momento. Funciona todo OK (activa el relé de apertura si el nº serie de la tarjeta RFID termina en "90" y también lo activa si en el teclado pulso la tecla "#"):
// ARDUINO UNO + RFID-RC522 + KEYPAD MATRIX 4X3
//Sketch que, por medio de un relé, activa la apertura de una cerradura eléctrica
//Funciona indistintamente por RFID mediante una tarjeta (o llave tipo moneda)
//Y tambien introduciendo una secuencia de caracteres determinada en el teclado
#include <Keypad.h>
//CONFIGURACION TECLADO
const byte filas=4;
const byte columnas=3;
byte pinsfilas[filas]={8,6,5,4}; //en orden F1,F2,F3,F4
byte pinscolumnas[columnas]={3,2,14};//en orden C1,C2,C3
char teclas[filas][columnas]=
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'},
};
Keypad teclado = Keypad(makeKeymap(teclas),pinsfilas,pinscolumnas,filas,columnas);
//FIN CONFIGURACION TECLADO
#include <SPI.h>
#include <RFID.h>
RFID rfid(10,9); // Pines de conexión del RFID
char tecla; // Variable para almacenar la tecla pulsada en el KeyPad
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
pinMode(7,OUTPUT);//Pin que activa el relé de apertura de la puerta
digitalWrite(7,HIGH);
}
void loop()
{
//INICIO CODIGO RFID
int codigo = 0;
int x=500; // tiempo de apertura de puerta
if (rfid.isCard()) {
Serial.println("IS CARD");
if (rfid.readCardSerial()) {
Serial.println(" ");
Serial.println("El numero de serie de la tarjeta es : ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" , ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" , ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" , ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" , ");
Serial.print(rfid.serNum[4],DEC);
Serial.println(" ");
codigo = rfid.serNum[4],DEC;// guardamos en la variable "codigo" el valor del cuarto bloque de caracteres de la tarjeta
}
}
rfid.halt();
//El siguiente IF abre la puerta a aquella tarjeta cuyo CUARTO BLOQUE de caracteres es igual a 90
if (codigo == 90)
{
Serial.println(" ");
Serial.println("Usuario Autorizado");
Serial.println(" ");
//Activa el Relé durante X segundos
digitalWrite(7, LOW);
delay(500);
digitalWrite(7, HIGH);
}
//FINAL CODIGO RFID
//INICIO CODIGO APERTURA CON TECLADO
tecla=teclado.getKey();
if (tecla != NO_KEY)//si se presionó una tecla
{
Serial.println(tecla);//imprimir el caracter tecleado en el Monitor Serial
if (tecla == '#')//si tecleamos el caracter "#" del KeyPad se abre la puerta
{
//Activa el Relé durante X segundos
digitalWrite(7, LOW);
delay(500);
digitalWrite(7, HIGH);
}
}
//FIN CODIGO APERTURA CON TECLADO
}
El último bloque donde capturo con el teclado es donde no se me ocurre como seguir....
Muchas gracias y un saludo!!!