Le plus simple est de remplacer le message "Accès invalide" par le message "Bonjour Maxime"... ![]()
Plus sérieusement, ton code c'est une usine à gaz : tu recopies les tests deux fois et c'est une source d'erreurs. Tu ferais mieux de faire la vérification des deux badges en une seule fois, genre :
if(rfid.isCard()){
if(rfid.readCardSerial()){
Serial.print(rfid.serNum[0]);
Serial.print(" ");
Serial.print(rfid.serNum[1]);
Serial.print(" ");
Serial.print(rfid.serNum[2]);
Serial.print(" ");
Serial.print(rfid.serNum[3]);
Serial.print(" ");
Serial.print(rfid.serNum[4]);
Serial.println("");
for(int x = 0; x < sizeof(card2); x++){
for(int i = 0; i < sizeof(rfid.serNum); i++ ){
if(rfid.serNum[i] != card1[x][i]) access1 = false;
if(rfid.serNum[i] != card2[x][i]) access2 = false;
}
} // <-- Attention j'ai modifié ici (fermeture accolade)
if (!access1) Serial.println("Acces carte 1 invalide");
if (!access2) Serial.println("Acces carte 2 invalide");
if (!access1 | !access2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Acces refuse");
delay(2000);
}
else if (access1) {
access1 = false; // <-- modif ici aussi -il est déjà true)
Serial.println("Acces carte 1 valide");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bienvenue Paul");
digitalWrite(relaisPin, HIGH);
delay (2000);
digitalWrite(relaisPin, LOW);
delay(2000);
}
else if (access2) {
access2 = false; // même chose
Serial.println("Acces carte 2 valide");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bienvenue Maxime");
digitalWrite(relaisPin, HIGH);
delay (2000);
digitalWrite(relaisPin, LOW);
delay(2000);
}
lcd.clear();
delay(1000);
lcd.print("Veuillez montrer");
lcd.setCursor(2, 1);
lcd.print("votre badge");
// if(access2) break;
}
// break;
}
J'ai écris ça rapidement, il faut vérifier si c'est correct et l'optimiser, mais c'est l'idée. J'ai commenté les break car je ne sais pas à quoi ils servent.