// https://forum.arduino.cc/t/arduino-mfrc522-rfid-continuous-reading/1440651/11
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 6 //define green LED pin
#define RELAY 5 //Relay out
#define LED_G2 4 //Green LED
#define LED_R 3//define red LED
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();
Serial.println("MFRC522 Ready to scan a card...");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent()) { // new card
return;
}
if (!rfid.PICC_ReadCardSerial()) { // known card
return;
}
String content = "";
for (byte i = 0; i < rfid.uid.size; i++)
{
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
content.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(rfid.uid.uidByte[i], HEX));
}
Serial.print("Card UID:");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
if (content.substring(1) == "01 02 03 04") {
Serial.println("Authorized");
} else { // wrong card
Serial.println("Denied");
digitalWrite(RELAY, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_G2, LOW);
digitalWrite(LED_R, HIGH);
delay(1000);
digitalWrite(LED_R, LOW);
}
rfid.PICC_HaltA ();
delay(500);
if (rfid.PICC_WakeupA ()) { // if wakeup is successful, a card is present
digitalWrite(RELAY, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_G2, HIGH);
digitalWrite(LED_R, LOW);
}
}
/*
// rfid.PICC_IsNewCardPresent () // see new card
// rfid.PICC_ReadCardSerial () // store card data
rfid.PICC_HaltA () // card is authorized, put card to sleep
if (rfid.PICC_WakeupA ()) { // if wakeup is successful, a card is present
digitalWrite(RELAY, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_G2, HIGH);
digitalWrite(LED_R, LOW);
}
// card present, so try some delay AND keep LEDs/relays ON
rfid.PICC_HaltA () // back to sleep
else // wakeup failed, no card present
// go to IsNewCardPresent()
*/RELAY
G2
R
G