RFID: Tag nur einmal aber dafür eindeutig einlesen?

Hallo.
Ich habe einen Stapel von 10 RFID-Tags, die ich gerne alle nur einmal aber dafür "garantiert" lesen lassen würde. Bisher habe ich im void loop( ...) am Ende einfach ein

  delay(1000);

stehen, was so natürlich nicht funktionieren kann, da dann das gleiche RFID-Tag immer wieder eingelesen wird. Daher zunächst die Frage, wie man es hinkriegen kann, dass dieses Tag nur einmal erfasst wird -- und dann auf das nächste gewartet wird?

Meine Idee war zunächst: die UID des Tags vom Vorgänger und Nachfolger miteinander vergleichen und nur dann neu lesen, wenn sie sich unterscheiden. Aber ob das die eleganteste Lösung ist??
Hat das schon mal jemand gemacht oder eine gute Idee, wie man's gut umsetzen könnte?

hängt vom Leser und vom Sketch ab.

Aber den Vergleich mit dem zuvor gelesenen Tag kannst schon machen. Das wird klappen.

memcmp

könnte dir beim Vergleich helfen, falls das die nächste Frage sein wird...

whiterabbit07:
Meine Idee war zunächst: die UID des Tags vom Vorgänger und Nachfolger miteinander vergleichen und nur dann neu lesen, wenn sie sich unterscheiden. Aber ob das die eleganteste Lösung ist??
Hat das schon mal jemand gemacht oder eine gute Idee, wie man's gut umsetzen könnte?

Das genau ist die praktikabelste Lösung.
Einen besseren Weg gibt es nach meiner Erfahrung nicht.

HotSystems:
Das genau ist die praktikabelste Lösung.
Einen besseren Weg gibt es nach meiner Erfahrung nicht.

Man könnte ja (theoretisch -- weiß nicht, wie es da um den Speicher des µC bestellt ist...) auch alle UIDs aller Tags erfassen und festhalten und dann sozusagen "abhaken":
schon erfasst
noch nicht erfasst
usw ... dann wüsste man auf jeden Fall, ob und wie viele Tags fehlen ... aber ob das pragmatisch ist bzw wie das in code gegossen aussähe, kann ich nicht beurteilen ....

noiasca:
hängt vom Leser und vom Sketch ab.
[...]
könnte dir beim Vergleich helfen, falls das die nächste Frage sein wird...

Leser und Sketch sind bisher das hier:
https://aptofun.de/NFC_Shield_V2.0
zusammen mit:

whiterabbit07:
Man könnte ja (theoretisch -- weiß nicht, wie es da um den Speicher des µC bestellt ist...) auch alle UIDs aller Tags erfassen und festhalten und dann sozusagen "abhaken":
schon erfasst
noch nicht erfasst
usw ... dann wüsste man auf jeden Fall, ob und wie viele Tags fehlen ... aber ob das pragmatisch ist bzw wie das in code gegossen aussähe, kann ich nicht beurteilen ....

Dazu müsstest du alle Tags zuvor ja schon eingelesen und gespeichert haben.

So ganz kann ich deinen Gedanken nicht folgen.

HotSystems:
Dazu müsstest du alle Tags zuvor ja schon eingelesen und gespeichert haben.

Ja, wäre das so schlimm? Einmal alle Tags erfassen und dafür sicher sein, dass dann auch alle zuverlässig erfasst werden?

... oder noch anders gedacht:
erstes RFID-Tag wird gelesen, UID in ein Array
zweites RFID-Tag kommt dazu -- Vergleich, ob es den Eintrag schon gibt
drittes RFID-Tag kommt dazu -- Vergleich ... usw
Dann müsste man doch vorher nicht alle einlesen und speichern!?
Oder übersehe ich da was?

Du solltest dir einfach mal ein Konzept erstellen, was genau du machen möchtest.

Ich weiß es nicht, welche Gedanken du gerade hast.

Alle zuvor einlesen und in ein Array speichern, nur so kannst du vergleichen, ob du alle schon erwischt hast.
Ohne die vorab gespeichert zu haben, weißt du es ja nicht.

HotSystems:
Alle zuvor einlesen und in ein Array speichern, nur so kannst du vergleichen, ob du alle schon erwischt hast.
Ohne die vorab gespeichert zu haben, weißt du es ja nicht.

... also ich stelle mir das so vor: von den 10 Tags weiß ich nur, dass ich sie alle genau einmal lesen will. Wenn ich das erste vor den Leser halte ich klar, dass es das erste ist ... beim zweiten muss ich mit dem ersten vergleichen, damit es eindeutig bleibt. beim dritten auch usw ...
Daher müsste man doch die UIDs bei jedem Durchlauf der Reihe nach einlesen und miteinander vergleichen können? Oder warum meinst du, dass die schon vorher alle bekannt sein müssen? Mir geht's wie gesagt eigentlich nur darum, dass jedes Tag wirklich nur einmal gezählt wird.

Ich hab jetzt nicht verstanden: willst Du alle 10 RFID im Stapel gleichzeitig lesen oder einzeln nacheinander?

Laut meiner Erfahrung kann ich nur 2 RFID übereinander lesen. Vieleicht kann ein anderer RFID Reader mehr lesen.

Grüße Uwe

Ok.....das geht.

Allerdings ist jetzt mal an der Zeit, genau zu beschreiben, was du machen möchtest, nicht wie.
Das kennen wir jetzt.
Evtl. gibt es ja dann noch eine bessere Lösung.

Beschreibe was du genau machen möchtest - nicht wie.

Muster zum ausbessern, fortsetzen:

"Ich will dass nur ein erstmals gelesener neuer Tag eine Ausgabe auf der Seriellen Schnittstelle auslöst"
"Wird ein bereits einmal gelesener Tag erneut gelesen so soll auf der Seriellen nichts ausgegeben werden"
"Ich rechne mit 10 verschiedenen Tags"
"Ich kenne die UIDs der Tags bereits"
"Wenn alle 10 Tags einmal gelesen wurden sind, und somit keine Aktion mehr möglich ist, dann ..."
"Ein Reset des Arduino bewirkt, dass gelesene Tags ..."
"Mein Kartenleser ist ein ... und hier gibt es ein Datenblatt ..."
"Da ich kein Datenblatt gefunden habe, hier ist der Link des gekauften Produktes..."
"Ich möchte einen ... programmieren"

uwefed:
Ich hab jetzt nicht verstanden: willst Du alle 10 RFID im Stapel gleichzeitig lesen oder einzeln nacheinander?

Hi.
Also nach meinem Wissen kann man das gleichzeitige Auslesen vieler Tags (im Moment?) noch ziemlich vergessen – es sei denn man setzt richtig große Lesegeräte ein, wie zB hier zu sehen: Fast RFID bulk reading with 100% read performance in Outbound logistics - YouTube
Ich kann ja mal die Idee konkretisieren: Angenommen man hat einen Werkzeugkasten mit Hammer, Zange, Schraubenzieher usw. Jedes Tool bekommt ein RFID-Tag – man weiß also, dass der Kasten vollständig ist, wenn jedes Tool genau einmal gelesen wurde. Reihenfolge ist egal – Hauptsache alle sind einmal da und wurden auch nur einmal gelesen. Das müsste man doch hinkriegen können?

whiterabbit07:
Hi.
Also nach meinem Wissen kann man das gleichzeitige Auslesen vieler Tags (im Moment?) noch ziemlich vergessen -- es sei denn man setzt richtig große Lesegeräte ein, wie zB hier zu sehen: Fast RFID bulk reading with 100% read performance in Outbound logistics - YouTube
Ich kann ja mal die Idee konkretisieren: Angenommen man hat einen Werkzeugkasten mit Hammer, Zange, Schraubenzieher usw. Jedes Tool bekommt ein RFID-Tag -- man weiß also, dass der Kasten vollständig ist, wenn jedes Tool genau einmal gelesen wurde. Reihenfolge ist egal -- Hauptsache alle sind einmal da und wurden auch nur einmal gelesen. Das müsste man doch hinkriegen können?

Ja, damit das richtig und fehlerfrei funktioniert, musst du die genutzten Tags vorher schon einmal eingelesen habenund dann vergleichen. Ohne diese Daten kann man ja irgend einen Tag (klar muss der auch passen) verwenden und den einlesen.

Und vor allem musst Du die Liste persistent gespeichert haben.

Gruß Tommy

HotSystems:
Ja, damit das richtig und fehlerfrei funktioniert, musst du die genutzten Tags vorher schon einmal eingelesen habenund dann vergleichen. Ohne diese Daten kann man ja irgend einen Tag (klar muss der auch passen) verwenden und den einlesen.

Das wäre nicht so schlimm -- klar: Das "System" wäre einfach zu überlisten aber dazu muss man ja erstmal ein RFID-Tag haben. Man könnte es ja zusätzlich "absichern", indem man als Text "Werkzeug" auf das Tag schreibt und die UID nur dann akzeptiert, wenn der Text stimmt. Dass man die Aufkleber der Reihe nach am Leser vorbeiführen muss, ist klar ... das geht scheinbar nicht anders.
Das Stichwort für das gleichzeitige Auslesen von RFID-Tags lautet "bulk read RFID" (Pulkverarbeitung) oder auch "PJM RFID" (Phasenjittermodulation – Wikipedia) -- aber ich denke, dass das den Rahmen dieser "Spielerei" total sprengen würde. Ist ja alles nur ein Hobbyprojekt...

"Ich will dass nur ein erstmals gelesener neuer Tag eine Ausgabe auf der Seriellen Schnittstelle auslöst"
Ja! Wenn das gleiche TAG (versehentlich) nochmal gelesen wird, soll nichts passieren.

"Wird ein bereits einmal gelesener Tag erneut gelesen so soll auf der Seriellen nichts ausgegeben werden"
Genau (s.o.)

"Ich rechne mit 10 verschiedenen Tags"
Ja, die Anzahl steht vorher fest

"Ich kenne die UIDs der Tags bereits"
Im Prinzip ja, da sie ja zusammen geliefert werden.

"Wenn alle 10 Tags einmal gelesen wurden sind, und somit keine Aktion mehr möglich ist, dann ..."
Dann gibt's eine Meldung: Vollständig!

"Ein Reset des Arduino bewirkt, dass gelesene Tags ..."
Gute Frage -- bin in der Programmierung nicht so sicher. Wenn man die eingelesenen TAGs für weitere Aktionen speichern könnte, wäre das sicher ein Vorteil. Aber nach meinem Verständnis muss das auch nicht sein.

"Mein Kartenleser ist ein ... und hier gibt es ein Datenblatt ..."
Hatte ich oben schon verlinkt:
Leser und Sketch sind bisher das hier:
NFC Shield V2.0 – Aptofun WIKI
zusammen mit:
NDEF/ReadTagExtended.ino at master · don/NDEF · GitHub

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.