/*
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::FC16_HW
#define MAX_DEVICES 2
#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(2);
P.setZone(0, 0, 0);
P.setZone(1, 1, 1);
P.setFont(CheckandFail);
P.displayZoneText(0, "O", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "O", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
delay(200);
}
void loop(void) {
static unsigned long timerpantalla;
static int8_t estadodisplay = 0;
if (estado == 0) {
switch (estadodisplay)
{
case 0:
P.displayZoneText(0, "O", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "O", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
timerpantalla = millis() + (FRAMETIME * 20);
estadodisplay++;
break;
case 1:
if (millis() > timerpantalla) {
P.displayZoneText(0, "P", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "P", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
timerpantalla = millis() + FRAMETIME;
estadodisplay++;
}
break;
case 2:
if (millis() > timerpantalla) {
P.displayZoneText(0, "Q", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "Q", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
timerpantalla = millis() + FRAMETIME;
estadodisplay++;
}
break;
case 3:
if (millis() > timerpantalla) {
P.displayZoneText(0, "P", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "P", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
estadodisplay = 0;
}
break;
default:
estadodisplay = 0;
break;
}
}
else {
if (estado == 1) {
P.displayZoneText(0, "C", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "C", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
}
if (estado == 2) {
P.displayZoneText(0, "X", PA_CENTER, SPEED_TIME, SPLAT_PAUSE_TIME, PA_PRINT);
P.displayZoneText(1, "X", PA_CENTER, SPEED_TIME, TEXT_PAUSE_TIME, PA_PRINT);
P.displayAnimate();
}
delay (2000);
estado = 0;
estadodisplay = 0;
}
}
Loading
esp32-c3-devkitm-1
esp32-c3-devkitm-1