#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 rfid(SS_PIN, RST_PIN);
Servo lockServo;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
lockServo.attach(5); // Attach the servo to pin 8
Serial.println("RFID Door Lock System");
}
void loop() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.print("Tag 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 (checkRFID(rfid.uid.uidByte, rfid.uid.size)) {
Serial.println("Access granted!");
unlockDoor();
delay(5000); // Keep the door unlocked for 5 seconds
lockDoor();
} else {
Serial.println("Access denied!");
}
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
bool checkRFID(byte *tagData, byte dataSize) {
// Replace this with your authorized tag data
byte authorizedTag[] = {0xAA, 0xBB, 0xCC, 0xDD};
if (dataSize != sizeof(authorizedTag)) {
return false;
}
for (byte i = 0; i < dataSize; i++) {
if (tagData[i] != authorizedTag[i]) {
return false;
}
}
return true;
}
void unlockDoor() {
lockServo.write(90); // Rotate the servo to unlock position
}
void lockDoor() {
lockServo.write(0); // Rotate the servo to lock position
}