RFID mit MFRC522 Wie PICC_IsNewCardPresent() resetten?

Hallo,

ich will euch nicht nerven, aber ich bin Anfänger komme an einer Stelle einfach nicht weiter. Wäre super, wenn mir jemand helfen könnte.

Ich benutze die MFRC522-Bib GitHub - miguelbalboa/rfid: Arduino RFID Library for MFRC522 , um Tags für ein kleines Leih-System auszulesen (mit Nutzerkarten und getaggtem Inventar). Das funktioniert auch ganz gut. Ein Problem habe ich nur mit der PICC_IsNewCardPresent() Funktion. In den meisten Fällen super, damit ich keine Tags mehrfach lese. Aber in machen Fällen würde ich das lokale Register, wo diese letzte Karte gespeichert ist, gerne resetten, damit ich dasselbe Tag direkt nochmal scannen kann (z.B. wenn es einen Übertragungsfehler gab und der Nutzer nochmal scannen soll).

Wie kriege ich das hin? Für Hilfe wäre ich sehr dankbar.

Danke und viele Grüße
Markus

(deleted)

millis des Lesevorgangs merken
wenn letzter Lesevorgang > 5 Sekunden her war, deine Variable löschen.

Moin,

danke, das ist mir soweit klar. Aber der MFRC522-Reader hat ein internes Register, das die letzte gescannte Karte speichert (so verstehe ich das jedenfalls). Mit der genannten Funktion kann man das abfragen (liefert true/false) und den Reader nur dann senden lassen, wenn ein neues Tag da ist (er macht quasi den vorher-nachher-Vergleich selber und ich muss meinen Ardiono nicht rechnen lassen). Diese Register würde ich gerne leeren, damit die Funktion mir wieder ein true liefert, auch wenn die Karte noch dieselbe ist wie bei der letzten Abfrage. Meine Frage zielte daher darauf ab, ob es jemanden gibt, der das schonmal gelöst hat oder die Bib super kennt und mir daher sagen kann, wie man das macht.

Viele Grüße
Markus

Ich habe in altem Code (April 2018) von mir das gefunden:

MFRC522 nfc(SS_PIN, RST_PIN);  // Create MFRC522 instance
...
typedef struct
{
  bool isTagPresent;
  ...
} tNFC_data;
tNFC_data nfcData;

  ...
  nfcData.isTagPresent = nfc.PICC_IsNewCardPresent();
  if (!nfcData.isTagPresent)
  {
    // try again; same card still on the sensor will then be recognized
    nfcData.isTagPresent = nfc.PICC_IsNewCardPresent();
  }

Der Kommentar behauptet, dass der Code das Problem löst. Ob er das wirklich tut, kann ich nicht versprechen :slight_smile: