Projet contrôle d'accès problème RFID

Bonjour
Je suis entrain de réaliser un programme pour ouvrir une porte grâce à un badge RFID mais je rencontre un problème.
Le programme pour détecter le badge fonctionne parfaitement.
voici le code:

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

#define SDA_PIN 10
#define RST_PIN 9

MFRC522 mrfc(SDA_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mrfc.PCD_Init();
  Serial.println("Rapprochez la carte du lecteur...");
}

void loop() {
  if (! mrfc.PICC_IsNewCardPresent())               //Si il n'y a pas de carte
  {
    return;                                         //attendre
  }
  if (! mrfc.PICC_ReadCardSerial())                 //Si la carte n'est pas lu dans le moniteur
  {
    return;                                         //attendre
  }
  Serial.print("Code du badge :");                  //afficher code du badge :
  String contenu = "";
  byte lettre;                                        //uid = code du badge
  for (byte i = 0; i < mrfc.uid.size; i++)            //mrfc.uid.size = Taille du code en HEX
  {
    Serial.print(mrfc.uid.uidByte[i] < 0x10 ? "0" : " ");
    Serial.print(mrfc.uid.uidByte[i], HEX);           //Envoie le code HEX du badge utilisé
    contenu.concat(String(mrfc.uid.uidByte[i] < 0x10 ? "0" : " "));
    contenu.concat(String(mrfc.uid.uidByte[i], HEX)); //Sauvegarde le code sous contenu
  }
  Serial.println();
  Serial.print("Message : ");
  contenu.toUpperCase();
  if (contenu.substring(1) == "940E 6D 1E" || contenu.substring(1) == "60 E8 A7 C3")    //Si le code est bon
  {
    Serial.println("Accès autorisé");           //Afficher accès autorisé
    Serial.println();
    delay(100);
  }
  else                                          //Si le code est mauvais
  {
    Serial.println("Accès refusé");             //Afficher Accès refusé
    delay(100);
  }


}

Et maintenant lorsque je rajoute quelque ligne pour faire ouvrir la gâche avec la carte RFID, la carte est détecté mais qu’une fois, comme si le programme est bloqué dans “void entree”.
voici le code:

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

#define SDA_PIN 10
#define RST_PIN 9
#define relais A0

MFRC522 mrfc(SDA_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mrfc.PCD_Init();
  Serial.println("Rapprochez la carte du lecteur...");

    pinMode(relais, OUTPUT);
  pinMode(A3, INPUT_PULLUP);
}

void loop() {
  if (! mrfc.PICC_IsNewCardPresent())               //Si il n'y a pas de carte
  {
    return;                                         //attendre
  }
  if (! mrfc.PICC_ReadCardSerial())                 //Si la carte n'est pas lu dans le moniteur
  {
    return;                                         //attendre
  }
  Serial.print("Code du badge :");                  //afficher code du badge :
  String contenu = "";
  byte lettre;                                        //uid = code du badge
  for (byte i = 0; i < mrfc.uid.size; i++)            //mrfc.uid.size = Taille du code en HEX
  {
    Serial.print(mrfc.uid.uidByte[i] < 0x10 ? "0" : " ");
    Serial.print(mrfc.uid.uidByte[i], HEX);           //Envoie le code HEX du badge utilisé
    contenu.concat(String(mrfc.uid.uidByte[i] < 0x10 ? "0" : " ")); 
    contenu.concat(String(mrfc.uid.uidByte[i], HEX)); //Sauvegarde le code sous contenu
  }
  Serial.println();
  Serial.print("Message : ");
  contenu.toUpperCase();
  if (contenu.substring(1) == "940E 6D 1E" || contenu.substring(1) == "60 E8 A7 C3")    //Si le code est bon
  {
    Serial.println("Accès autorisé");           //Afficher accès autorisé
    Serial.println();
    entree();
   
  }
  else                                          //Si le code est mauvais
  {
    Serial.println("Accès refusé");             //Afficher Accès refusé
    delay(100);
  }
}

  void entree() {
  digitalWrite(relais, HIGH);
  delay(100);
  digitalWrite(relais, LOW);
  
}

Je ne comprend pas du tout pourquoi cela ne marche pas, donc si quelqu’un peut m’aider ?

Si tu débranches la gâche, que se passe t-il ?

Si je débranche la gâche, cela ne gêne en rien juste que la porte ne s'ouvre pas du coup, mais dans le moniteur j'ai bien le message qui affiche que normalement c'est ouvert.

OK mais est-ce que cela marche plusieurs fois ?

Mon soupçon : parasite à cause du solénoïde.