Bonjour bixie
Tu n'as rien mis pour l'éteindre!
J'ai regardé comment mieux tourner ton programme, car tel quel c'était difficile.
J'ai déplacé le test de l'UID dans une fonction boolean cardCheck(byte bonUID[]) qui fait le nécessaire pour dire si l'UID est OK ou pas.
Ainsi, dès que l'UID est OK, la LED s'allume au moins 3 secondes, ensuite le programme attend que la carte soit retirée pour éteindre le LED.
/*******************************************************************************
RFID LEDs
Exemple d'utilisation de la bibliothèque MFRC522 par Miguel Balboa
Lorsque le tag RFID est accepté, une LED verte s'allume pendant 3 secondes
Lorsque le tag RFID est refusé, une LED rougeo s'allume pendant 3 secondes
Pour plus de détails:
https://electroniqueamateur.blogspot.com/2017/04/module-rfid-rc522-et-arduino.html
***********************************************************************************/
#include <SPI.h>
#include <MFRC522.h>
// copier ici le résultat du sketch "lectureUID.ino":
const byte bonUID[4] = {196, 179, 128, 20};
const int pinLEDStrip = 7; // LED verte
const int pinRST = 9; // pin RST du module RC522
const int pinSDA = 10; // pin SDA du module RC522
bool (tag) = false;
MFRC522 rfid(pinSDA, pinRST);
void setup()
{
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();
pinMode(pinLEDStrip, OUTPUT);
}
void loop()
{
if (cardCheck(bonUID))
{
Serial.println("Card OK");
digitalWrite(pinLEDStrip, HIGH); // on allume la LED verte pendant trois secondes
delay(3000);
while(cardCheck(bonUID)) {} // tant que cette carte n'est pas retirée
digitalWrite(pinLEDStrip, LOW); // on éteind la LED une fois que la carteest retirée
}
}
boolean cardCheck(byte bonUID[])
{
boolean check = false;
rfid.PCD_Init();
if(rfid.PICC_IsNewCardPresent())
{
if (rfid.PICC_ReadCardSerial()) // on a lu avec succès son contenu
{
check = true;
for (byte i = 0; i < rfid.uid.size; i++) // comparaison avec le bon UID
{
if (rfid.uid.uidByte[i] != bonUID[i])
{
check = false;
}
}
}
}
return check;
}
Cordialement
jpbbricole