Buenas, no esta probado ni tengo manera de probarlo, pero creo que debería de funcionar .
Un saludo
#include <Keypad.h>
const byte FILAS = 4;
const byte COLUM = 3;
char Teclas[FILAS][COLUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} };
byte PinsFilas[FILAS] = {5, 4, 3, 2}; //Pins de las filas
byte PinsColum[COLUM] = {8, 7, 6}; //Pines delas columnas
Keypad Teclado = Keypad( makeKeymap(Teclas), PinsFilas, PinsColum, FILAS, COLUM );
byte PinBuzzer = 9;
byte PinLed = 10;
const byte DigitosClave=4;
char Clave[DigitosClave] = {'1','2','3','4'};
byte Coincidencias=0;
byte DigitosPulsados=0;
void setup()
{
Serial.begin(9600);
pinMode(PinBuzzer, OUTPUT);
pinMode(PinLed, OUTPUT);
}
void Pitido(int Duracion, int Espera, int Repeticiones)
{
for (int x=0; x<Repeticiones; x++)
{
analogWrite(PinBuzzer,128); // Emite pitido
delay(Duracion); // Tiempo de pitido
digitalWrite(PinBuzzer, LOW);
delay(Espera);
}
}
void loop()
{
char key = Teclado.getKey();
if (key != NO_KEY) // Hay tecla pulsada?
{
Pitido(250,0,1);
Serial.println(key);
if(key=='*') // Abrir??
{
if(Coincidencias==DigitosClave)
{
Pitido(125,125,3);
digitalWrite(PinLed, LOW);
delay(4000);
digitalWrite(PinLed, LOW);
}
key=='#';
}
if(key=='#') // Borrar
{
Coincidencias=0;
DigitosPulsados=0;
Pitido(500,0,1);
}
if (DigitosPulsados<DigitosClave && key==Clave[DigitosPulsados])
{ // No hemos pulado mas digitos que la clave y coinciden
Coincidencias++;
DigitosPulsados++;
}
else
{
DigitosPulsados=DigitosClave+1; // Clave incorrecta,
Coincidencias=0; // ya no controlamos mas hasta q borre
}
}
}