Connection Diagram
CODE
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
const int relayPins[4] = {4, 5, 6, 7};
const int NUM_RELAYS = 4;
bool relayState[NUM_RELAYS] = {false, false, false, false};
// Replace with your card UIDs
byte card1[4] = {0x34, 0xD6, 0x4A, 0xB4}; // Example UID for Relay 1
byte card2[4] = {0x23, 0xA1, 0x29, 0x1A}; // Example UID for Relay 2
byte card3[4] = {0x55, 0x66, 0x77, 0x88}; // Example UID for Relay 3
byte card4[4] = {0x99, 0xAA, 0xBB, 0xCC}; // Example UID for Relay 4
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
for (int i = 0; i < NUM_RELAYS; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], HIGH); // assuming LOW turns relay on
}
Serial.println("Scan RFID Card...");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
return;
}
byte* uid = rfid.uid.uidByte;
if (checkUID(uid, card1)) toggleRelay(0);
else if (checkUID(uid, card2)) toggleRelay(1);
else if (checkUID(uid, card3)) toggleRelay(2);
else if (checkUID(uid, card4)) toggleRelay(3);
else Serial.println("Unknown card!");
delay(1000); // debounce delay
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
bool checkUID(byte* uid, byte* validUID) {
for (byte i = 0; i < 4; i++) {
if (uid[i] != validUID[i]) return false;
}
return true;
}
void toggleRelay(int relayIndex) {
relayState[relayIndex] = !relayState[relayIndex];
digitalWrite(relayPins[relayIndex], relayState[relayIndex] ? LOW : HIGH);
Serial.print("Toggled Relay ");
Serial.println(relayIndex + 1);
}