/*
Pines RFID
IRQ 2
RESET 3
SDA 8
SCL 9
Pines Matriz 8x8
CLK 4
CS 7
DIN 6
*/
#include <Adafruit_PN532.h> //https://docs.arduino.cc/libraries/adafruit-pn532/
#include <MD_Parola.h> //https://docs.arduino.cc/libraries/md_parola/
#include <MD_MAX72xx.h> //https://docs.arduino.cc/libraries/md_max72xx/
#include <SPI.h>
#include "fuente.h" //Fuente con Simbolos
//Config RFID I2C
#define PN532_IRQ (2)
#define PN532_RESET (3)
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
//Config. Matrices LED
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 1
#define CS_PIN 7
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
#define SPEED_TIME 1
#define SPLAT_PAUSE_TIME 1
#define TEXT_PAUSE_TIME 1
#define FRAMETIME 125
//Variables
int8_t estado = 0;
const String tarjetasvalidas[] = {
"195436148",
"21349141221",
"215941566",
"1491626550",
"5370169221",
"13223322231"
};
const int cantidadtarjetas = (sizeof(tarjetasvalidas) / sizeof(tarjetasvalidas[0])) - 1;
String tarjeta = "";
String tarjetaanterior = "";
void ControlRFID(void *e) {
for (;;) {
if (estado == 0) {
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
uint8_t uidLength;
while (tarjeta == tarjetaanterior) {
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
String datostarjeta;
for (int i = 0; i < 4; i++) {
datostarjeta = datostarjeta + uid[i];
}
tarjeta = datostarjeta;
Serial.print("Codigo de la Tarjeta: ");
Serial.println(tarjeta);
}
delay(20);
}
tarjetaanterior = tarjeta;
for (int i = 0; i <= cantidadtarjetas; i++) {
/*
Serial.print("Comparando: ");
Serial.print(tarjeta);
Serial.print(" con ");
Serial.println(tarjetasvalidas[i]);
*/
if (tarjeta == tarjetasvalidas[i]) {
estado = 1;
break;
}
}
if (estado == 0) {
estado = 2;
}
}
delay(20);
}
}
void setup(void) {
Serial.begin(115200);
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (!versiondata) {
Serial.print("Error de la placa RFID");
while (1)
;
}
xTaskCreate(ControlRFID, "ControlRFID", 2048, NULL, 2, NULL);
P.begin();
P.setFont(CheckandFail);
P.displayClear();
}
void loop(void) {
if (estado != 0) {
if (estado == 1) {
P.displayText("C", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
}
if (estado == 2) {
P.displayText("X", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
}
delay(2000);
P.displayClear();
delay(10);
estado = 0;
}
}