Bueno pues gracias a la ayuda de Noter ya está el código 100% operativo!!!
Aquí lo dejo por si a alguien le resulta de utilidad:
// 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
// en este ejemplo la clave será "1234" y el caracter # al final.
//La ultima parte del código referente a la apertura con el KeyPad corresponde
//al usuario "Noter" del Foro Arduino.cc. ¡¡Gracias!!
//INICIO CONFIGURACION TECLADO
#include <Keypad.h>
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
//____________________________________
char *clave="1234"; // *****1234 ES LA CLAVE DE 4 DÍGITOS PARA QUE ABRA CON EL TECLADO. MODIFICAR*********
char *introducida="xxxx"; // Para guardar espacio en memoria para la clave que introducimos
int indiceTeclado=0;
//____________________________________
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 APERTURA POR RFID
int codigo = 0;
int x=1000; // tiempo de apertura de puerta
if (rfid.isCard()) {
Serial.println("IS CARD");
// El siguiente IF muestra en la Pantalla Serial el nº de serie de la tarjeta "escaneada"
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
//si queremos aumentar la seguridad podemos almacenar en otra/s variables más bloques
}
}
rfid.halt();
//El siguiente IF abre la puerta a aquella tarjeta cuyo CUARTO BLOQUE de caracteres es igual a 90
//si queremos aumentar la seguridad podemos comparar más bloques en lugar de solo el cuarto
if (codigo == 90)
{
Serial.println(" ");
Serial.println("Usuario Autorizado. Bienvenido");
Serial.println(" ");
//Activa el Relé durante X segundos
digitalWrite(7, LOW);
delay(x);
digitalWrite(7, HIGH);
}
//FIN CODIGO APERTURA POR RFID
//INICIO CODIGO APERTURA CON TECLADO
tecla=teclado.getKey();
if (tecla != NO_KEY)//si se presionó una tecla
{
if (tecla == '#')//si tecleamos el caracter "#" del KeyPad comprobaremos si abrir la puerta, y reiniciaremos clave introducida
{
if (indiceTeclado==4) // Si no hemos introducido cuatro caracteres, ni comprobamos
{
bool coincide=true;
for (int i=0;i<4;i++){
if (clave[i]!=introducida[i])
{
coincide=false;
Serial.println(" ");
Serial.println("Clave INCORRECTA");
Serial.println(" ");
break; //si uno de los caracteres no coincide, salimos del bucle
}
}
if (coincide)
{
Serial.println(" ");
Serial.println("Usuario Autorizado. Bienvenido");
Serial.println(" ");
//Activa el Relé durante X segundos
digitalWrite(7, LOW);
delay(x);
digitalWrite(7, HIGH);
}
}
Serial.println();
indiceTeclado=0; // Siempre que se pulse # "borramos" la clave
}
else // Si la tecla no es #
{
if (indiceTeclado < 4) // Cuando existan ya cuatro caracteres "pasamos de recibir más"
{
introducida[indiceTeclado]=tecla;
indiceTeclado++;
Serial.print(tecla);
}
}
}
//FIN CODIGO APERTURA CON TECLADO
}
Se puede mejorar la seguridad comparando todos los bloques de datos de cada tarjeta RFID así como añadiendo más caracteres a la clave cuando se utiliza el teclado. Eso a gusto de cada uno
Un saludo y muchas gracias de nuevo compañero Noter!!!!