Arduino RFID reader mit Timer?
Ich habe folgendes Problem, ich versuche eine maschine in arduino zu bauen, welche die zeit misst wo keine RFID karte auf dem reader liegt. Nun habe ich aber folgendes Problem, wenn ich die karte auflege wird der Timer schon gesartet, dieser soll aber erst gesartet werden, wenn der user die karte vom reader entpfernt. kann mir da jemand helfen.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN D4 // SDA Pin (Slave Select)
#define RST_PIN D3 // Reset Pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // RFID-Instanz
unsigned long startTime;
bool timerActive = false;
bool cardDetected = false;
void setup() {
Serial.begin(115200); // Initialisiere die serielle Kommunikation
SPI.begin(); // Initialisiere den SPI-Bus
mfrc522.PCD_Init(); // Initialisiere den RFID-Leser
Serial.println("RFID-Leser bereit. Halten Sie eine Karte an den Leser.");
}
void loop() {
bool cardPresent = mfrc522.PICC_IsNewCardPresent();
if (cardPresent) {
if (mfrc522.PICC_ReadCardSerial()) {
// Karte wird erkannt
if (timerActive) {
// Timer stoppen und Zeit ausgeben
unsigned long elapsedTime = millis() - startTime;
Serial.print("Zeit gemessen: ");
Serial.print(elapsedTime);
Serial.println(" ms");
timerActive = false; // Timer zurücksetzen
}
cardDetected = true; // Karte wurde erkannt
mfrc522.PICC_HaltA(); // Halt das Leseverfahren
mfrc522.PCD_StopCrypto1();
}
} else {
// Wenn keine Karte mehr vorhanden ist
if (cardDetected && !timerActive) {
// Timer starten, wenn der Timer nicht aktiv ist
startTime = millis();
timerActive = true;
Serial.println("Timer gestartet.");
}
cardDetected = false; // Karte wurde entfernt
}
}
1 Antwort
Das Problem wird wahrscheinlich an mfrc522.PICC_IsNewCardPresent() liegen. Das ist die Doku dazu:
/**
* Returns true if a PICC responds to PICC_CMD_REQA.
* Only "new" cards in state IDLE are invited. Sleeping cards in state HALT are ignored.
*
* @return bool
*/
Wie auch der Funktionsname eigentlich verrät, gibt es nur beim Auflegen einmalig ein true.
mfrc522.PICC_HaltA() startet auf jeden Fall den HALT State.
Ob mfrc522.PCD_StopCrypto1() etwas am State ändert, beschreibt die Doku nicht.
Du könntest diesen Verdacht mit dem Debugger bzw. auch Print Statements einfach überprüfen.