RFID Lock won't work in loop, after providing access

Hello, I'm relatively new to Arduino Community and Arduino projects. So I started with an RFID door lock project, which worked surprisingly well but has a flaw. Every time I scan a card with access, it works intentionally and retracts the Solenoid lock, but once it accepts the correct card, it will no longer look for the other and it will stop working. I need to reactivate the serial monitor mode again and again. I want it to work in a loop, so that even after being accepted, it will start looking for RFID cards again and continue the unlocking and locking process again.

This is what I've used in my project

  1. Arduino UNO
  2. One channel relay
  3. RFID Card Reader
  4. Buzzer
  5. Solenoid Lock 12v
  6. 12v Power Adapter

Here's the code:

#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 5
#define RST_PIN 9
#define RELAY 3 //connect the relay to number 3 pin
#define BUZZER 2 // connect the buzzer to 2 pin
#define ACCESS_DELAY 2000
#define DENIED_DELAY 1000
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();          // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  pinMode(RELAY, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  digitalWrite(RELAY, HIGH);
  Serial.println("Put your card to the reader for scanning ...");
  Serial.println();

}
void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "3D CF 58 37") // enter your own card number after copying it from serial monitor
  {

    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(RELAY, LOW);
    delay(ACCESS_DELAY);
    digitalWrite(RELAY, HIGH);
    delay(1);
  }
 
 else   {
    Serial.println(" Access denied");
    tone(BUZZER, 300);
    delay(DENIED_DELAY);
    noTone(BUZZER);
  }
}

You forgot this code:

 rfid.PICC_HaltA(); // halt PICC
rfid.PCD_StopCrypto1(); // stop encryption on PCD

Please see more in this Arduino RFID door lock system tutorial

Hey, thanks, but I can't access that web page. Could you tell me where should I put that line of code?

I edited the link, you can access it now on my previous comment

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.