problem with rfid rc522

i have arduino with rfid for door lock after opening the door to many times the rfid don't response and after cuting the power the rfid start fonction again please help me this is my code :

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5 //define green LED pin
#define LED_R 4 //define red LED
#define RELAY 3 //relay pin
#define BUZZER 2 //buzzer 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(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(RELAY, OUTPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
digitalWrite(RELAY, HIGH);
Serial.println("Put your card to the reader...");
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) == "B2 CF DC 79" || content.substring(1) == "97 D7 DC 79" || content.substring(1) == "BA 46 FC A9" || content.substring(1) == "7B E7 DC 79" || content.substring(1) == "D9 15 59 59" || content.substring(1) == "19 6C 6F 29") //change here the UID of the card/cards that you want to give access
{ 
  Serial.println("Authorized access");
  Serial.println();
  delay(500);
  digitalWrite(RELAY, HIGH);
  digitalWrite(LED_G, HIGH);
  delay(ACCESS_DELAY);
  digitalWrite(RELAY, LOW);
  digitalWrite(LED_G, LOW);
}

else   {
  Serial.println(" Access denied");
  digitalWrite(LED_R, HIGH);
  tone(BUZZER, 300);
  delay(DENIED_DELAY);
  digitalWrite(LED_R, LOW);
  noTone(BUZZER);
}
}

Please edit your code to put the program between CODE tags. As it is now, all the "[ i ]" are masked as they are understood as "italic" tags. Then, your code is hard to read and has mistakes that do not really exist.

To do so, read the explanation in pinned messages at the top of the forum.

i have arduino with rfid for door lock after opening the door to many times the rfid don't response and after cuting the power the rfid start fonction again please help me this is my code

Your code is quite standard, there is nothing in it that would create the problem you describe. It must come from something else. How is your reader powered? Can you show how everything is connected? How much us "too many times"? What does "not respond" mean? How do you know it's a reader related problem and not an Arduino problem? What Arduino board do you use?

im using arduino uno powered by 12v the meaning of no response is when i put the card nothing hapend

I think the reader should be fed by 5V, not 3.3 V.

i have arduino with rfid for door lock after opening the door to many times the rfid don't response and after cutting the power the rfid start function again

Perhaps you have a memory fragmentation problem due to your use of the String class.

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

See The Evils of Arduino Strings.

Look at the mfrc library example AccessControl.ino. and the getID() function for how to do this without Strings.

thanks

So if the problem comes from the String, one solution is to use char arrays :

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5 //define green LED pin
#define LED_R 4 //define red LED
#define RELAY 3 //relay pin
#define BUZZER 2 //buzzer pin
#define ACCESS_DELAY 2000
#define DENIED_DELAY 1000
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
byte UId[4] = {0};

void setup()
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();          // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(RELAY, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  digitalWrite(RELAY, HIGH);
  Serial.println("Put your card to the reader...");
  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++)
  {
    UId[i] = mfrc522.uid.uidByte[i];
    Serial.print(UId[i] < 0x10 ? " 0" : " ");
    Serial.print(UId[i], HEX);
  }
  Serial.println();
  //change here the UID of the card/cards that you want to give access
  if ((UId[0] == 0xB2 && UId[1] == 0xCF && UId[2] == 0xDC && UId[3] == 0x79) ||
      (UId[0] == 0x97 && UId[1] == 0xD7 && UId[2] == 0xDC && UId[3] == 0x79) ||
      (UId[0] == 0xBA && UId[1] == 0x46 && UId[2] == 0xFC && UId[3] == 0xA9) ||
      (UId[0] == 0x7B && UId[1] == 0xE7 && UId[2] == 0xDC && UId[3] == 0x79) ||
      (UId[0] == 0xD9 && UId[1] == 0x6C && UId[2] == 0x6F && UId[3] == 0x29)) {
    /*     if (content.substring(1) == "B2 CF DC 79" || content.substring(1) == "97 D7 DC 79"
      || content.substring(1) == "BA 46 FC A9" || content.substring(1) == "7B E7 DC 79"
      || content.substring(1) == "D9 15 59 59" || content.substring(1) == "19 6C 6F 29") */
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(RELAY, HIGH);
    digitalWrite(LED_G, HIGH);
    delay(ACCESS_DELAY);
    digitalWrite(RELAY, LOW);
    digitalWrite(LED_G, LOW);
  }

  else   {
    Serial.println(" Access denied");
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 300);
    delay(DENIED_DELAY);
    digitalWrite(LED_R, LOW);
    noTone(BUZZER);
  }
}

<3 thanks you <3

I made a mistake here, correction:

  if ((UId[0] == 0xB2 && UId[1] == 0xCF && UId[2] == 0xDC && UId[3] == 0x79) ||
      (UId[0] == 0x97 && UId[1] == 0xD7 && UId[2] == 0xDC && UId[3] == 0x79) ||
      (UId[0] == 0xBA && UId[1] == 0x46 && UId[2] == 0xFC && UId[3] == 0xA9) ||
      (UId[0] == 0x7B && UId[1] == 0xE7 && UId[2] == 0xDC && UId[3] == 0x79) ||
      (UId[0] == 0xD9 && UId[1] == 0x15 && UId[2] == 0x59 && UId[3] == 0x59) ||
      (UId[0] == 0x19 && UId[1] == 0x6C && UId[2] == 0x6F && UId[3] == 0x29)) {
    /*     if (content.substring(1) == "B2 CF DC 79" || content.substring(1) == "97 D7 DC 79"
      || content.substring(1) == "BA 46 FC A9" || content.substring(1) == "7B E7 DC 79"
      || content.substring(1) == "D9 15 59 59" || content.substring(1) == "19 6C 6F 29") */

Please double check...

thank you again i had the same problem after 20 attempt of opening the door nothing responds i can't open the door again so i had to change all the code i stiill testing it

String content = "";

This is an unused variable, and the compiler probably eliminates it, but it wouldn't hurt to get it out of the program.

i had the same problem after 20 attempt of opening the door nothing responds

if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }

These two sections can block the code. I would try to add some Serial output to see which one is stopping the program or if there is some other reason for the failure.