Nur so als Gedanke was grob gemacht werden müsste…(natürlich alles ungetestet und auch nicht vollständig)
die do-while in der “void loop() {…}” muss geändert werden von:
do {
.....
// Ende der Buttons
} while (!mfrc522.PICC_IsNewCardPresent());
zum Bsp. zu:
do {
.....
// Ende der Buttons
} while (!cardRemoved);
zusätzlich braucht man folgende Funktionen
bool cardRemoved() {
//über millis() nur alle zwei Sekunden oder so ausführen.
if(millis() - previousMillis > 2000)
{
previousMillis =millis();
mfrc522.PICC_WakeupA();
if(oldUID !=getID()) return true;
else return false;
}
}
unsigned long getID(){
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num = mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] << 8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}
dann muss natürlich auch noch alles hinter der do{…}while(…) angepasst werden da dieser Teil sonst ständig durchlaufen wird wenn keine Karte aufgelegt ist. Dann müsste die UID einer eingelesenen Karte gespeichert werden “oldUID”, im Moment wird ja nur der Magic Cookie ausgewertet und bestimmt noch einiges was Ich vergessen habe.