Multiple Relay Control with Multiple RFID Cards







 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);


}

Post a Comment

Previous Post Next Post

Contact Form