Hola buenas, quiero hacer con un teclado matricial de 3x4 un acceso con varios usuarios. encontré un código por Internet y lo estoy modificando ya que no quiero rfid me pueden ayudar????
CODIGO ORIGINAL:
#include <MFRC522.h>//Descargar e incluir la librería
#include <SPI.h>
/*
Pins SPI UNO Mega2560 Leonardo
1 (NSS) SAD (SS) 10 53 10
2 SCK 13 52 SCK1
3 MOSI 11 51 MOSI1
4 MISO 12 50 MISO1
5 IRQ * * *
6 GND GND GND GND
7 RST 5 ? Reset
8 +3.3V (VCC) 3V3 3V3 3.3V
* No necesario
*/
#define SAD 10
#define RST 5
MFRC522 nfc(SAD, RST);
#define ledPinAbierto 2
#define ledPinCerrado 3
void setup() {
pinMode(ledPinAbierto , OUTPUT);
pinMode(ledPinCerrado, OUTPUT);
SPI.begin();
Serial.begin(115200);
Serial.println("Buscando RC522");
nfc.begin();
byte version = nfc.getFirmwareVersion();
if (! version) {//Entra si no encuentra el módulo.
Serial.print("No ha encontrado RC522");
while(1); //detener
}
Serial.print("Ha encontrado RC522");
Serial.print("Firmware version 0x");
Serial.print(version, HEX);
Serial.println(".");
}
#define AUTHORIZED_COUNT 1 //Para autoriazar más tarjetas ponemos el número aqui y la añadimos abajo
byte Authorized[AUTHORIZED_COUNT][6] = {
{0x83, 0xF4, 0x8D, 0xC6, 0x3C,}
//,{0x10, 0x14, 0x39, 0x2E, 0xFF, 0xFF, } ejemplo de como autorizar más tarjetas 0x83,.....
};
void printSerial(byte *serial);
boolean isSame(byte *key, byte *serial);
boolean isAuthorized(byte *serial);
void loop() {
byte status;
byte data[MAX_LEN];
byte serial[5];
boolean Abierto = false;
digitalWrite(ledPinAbierto, Abierto);
digitalWrite(ledPinCerrado, !Abierto);
status = nfc.requestTag(MF1_REQIDL, data);
if (status == MI_OK) {
status = nfc.antiCollision(data);
memcpy(serial, data, 5);
if(isAuthorized(serial))
{
Serial.println("Autorizado");
Abierto = true;
}
else
{
printSerial(serial);
Serial.println("NO autorizado");
Abierto = false;
}
nfc.haltTag();
digitalWrite(ledPinAbierto, Abierto);
digitalWrite(ledPinCerrado, !Abierto);
delay(2000);
}//if (status == MI_OK)
delay(500);
}//void loop()
boolean isSame(byte *key, byte *serial)
{
for (int i = 0; i < 4; i++) {
if (key[i] != serial[i])
{
return false;
}
}
return true;
}
boolean isAuthorized(byte *serial)
{
for(int i = 0; i<AUTHORIZED_COUNT; i++)
{
if(isSame(serial, Authorized[i]))
return true;
}
return false;
}
void printSerial(byte *serial)
{
Serial.print("Serial:");
for (int i = 0; i < 5; i++) {// aumentar a 5 para leer el número de la tarjeta completo
Serial.print(serial[i], HEX);
Serial.print(" ");
}
}
CODIGO MODIFICADO
#include <Wire.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
const byte ledind=9; //Rele del Abrepuertas
const int timetoclean=3000; //msecs en quitar información display //aqui podemos introducir las personas a la que pertenecen los targetas
unsigned long clearlcd;
boolean er; //Cambia de estado cuando hay información en el display
//se utiliza para hacer limpieza del display
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] =
{ {'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};
byte rowPins[ROWS] = {7,6,5,4};// PINES PARA LAS FILAS
byte colPins[COLS] = {3,2,1};// PINES PARA LAS COLUMNAS
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);// PINES PARA LA LCD
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
const byte ncodigos=3; //Nº de codigos que queremos usar
//Detallamos los codigos que darán paso
char* Codkeypad[ncodigos]={"123456",
"654321",
"000000"};
//Detallamos los saludos correspondientes a cada código
char* nombreskeypad[ncodigos]={"Hola Sr. Merkel",
"Hola Sr. Rajoy",
"Buenas Sr. Pujol"};
String pass;
byte pos= 0;
void setup() {
lcd.begin(16,2);
limpialcd(); //Procedimiento borrado display
pinMode(ledind, OUTPUT); //Definimos el pin13 de salida
digitalWrite(ledind, LOW);
}
void loop() {
//45
void limpialcd(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pase su tarjeta o");
lcd.setCursor(0,1);
lcd.print("Teclee codigo:");
er=false;
pos=0;
pass=""; }
//55
//Hace de contador de digitos al introducir codigo y cuando
//ya se han introducido 6 digitos llama al procedimiento para
//su compruebacion
void password(char key) {
pass+= key;
lcd.setCursor(14+pos,1);
lcd.print("*");
if (pos<5)
pos++;
else {comprueba_codigos();pos=0;}
}
//67
//Comprueba si el codigo introducido esta registrado
//si lo está da acceso
void comprueba_codigos() {
boolean encontrada=false;
for (byte a=0; a<ncodigos;a++){
String pwd = String(Codkeypad[a]);
if (pwd==pass) {
lcd.setCursor(0,3);
lcd.print(nombreskeypad[a]);
encontrada=true;}}
lcd.setCursor(0,2);
if (encontrada) {
//80
lcd.print("Codigo valido");
digitalWrite(ledind, HIGH);
delay(500); //Activamos el led durante 0,5 seg
digitalWrite(ledind, LOW); }
else
{lcd.print("Codigo invalido");
lcd.setCursor(0,3);
lcd.print("Vuelvase a casa");}
er=true;
clearlcd=millis();}
SALUDOSSS