Hello, I have this code that verifies if the card that the sensor scans is registered or not and notifies it through an lcd and a led color. When I scan card 1 or 2, the green led turns on and the red one turns off as it should, but the display remains "esperando autorizacion..." any ideas? Thanks.
#include <MFRC522.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Keypad.h>
#define SS 10
#define RST 9
MFRC522 lector(SS, RST);
int led_abierto = A0;
int led_cerrado = A1;
unsigned long tiempoUltimaLectura = 0;
unsigned long tiempoEspera = 5000;
byte usuario1[4] = { 0x52, 0x81, 0x56, 0xD3 };
byte usuario2[4] = { 0xA2, 0x88, 0x68, 0x1B };
byte tarjeta_leida[4];
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void resetearValores() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Esperando");
lcd.setCursor(0, 1);
lcd.print("autorizacion...");
digitalWrite(led_cerrado, HIGH);
digitalWrite(led_abierto, LOW);
}
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
while (!Serial);
SPI.begin();
lector.PCD_Init();
resetearValores();
}
void loop() {
// Verificar si hay una nueva tarjeta presente
if (lector.PICC_IsNewCardPresent()) {
// Leer el UID de la tarjeta
if (lector.PICC_ReadCardSerial()) {
tiempoUltimaLectura = millis(); // Actualizar el tiempo de última lectura
for (byte i = 0; i < lector.uid.size; i++) {
tarjeta_leida[i] = lector.uid.uidByte[i];
}
if (compararUID(tarjeta_leida, usuario1)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bienvenido!");
lcd.setCursor(0, 1);
lcd.print("Usuario 1.");
digitalWrite(led_abierto, HIGH);
digitalWrite(led_cerrado, LOW);
} else if (compararUID(tarjeta_leida, usuario2)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bienvenido!");
lcd.setCursor(0, 1);
lcd.print("Usuario 2.");
digitalWrite(led_abierto, HIGH);
digitalWrite(led_cerrado, LOW);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Acceso denegado!");
lcd.setCursor(0, 1);
lcd.print("Tarjeta invalida.");
digitalWrite(led_abierto, LOW);
digitalWrite(led_cerrado, HIGH);
}
}
}
lector.PICC_HaltA(); // Detener comunicación con la tarjeta
// Verificar si han pasado los 3 segundos desde la última lectura exitosa
if (millis() - tiempoUltimaLectura >= tiempoEspera) {
resetearValores();
tiempoUltimaLectura = millis(); // Reiniciar el tiempo de última lectura
}
// Verificar si han pasado los 3 segundos desde la última lectura exitosa
}
boolean compararUID(byte* tarjeta1, byte* tarjeta2) {
for (int i = 0; i < 4; i++) {
if (tarjeta1[i] != tarjeta2[i]) {
return false;
}
}
return true;
}