Arduino mit MFRC522-Reader

Arduino mit MFRC522-Reader

Auslesen der UID

Wir wollen jetzt die komplette UID-Struktur auslesen, also die Länge der Seriennummer, die Seriennummer selbst und den Wert für "select acknowledge" SAK.



In der loop-Funktion führen wir am Amfang einen Request durch, geben wie schon bekannt in Abhängigkeit des ATQA-Blocks den Kartentyp aus und springen dann anstelle der PICC_Select-Methode in eine eigene Funktion, die wir outputUID() nennen.

Diese Funktion ist wie folgt aufgebaut:



Am Anfang wird die Select-Methode aufgerufen und dann geprüft, ob die Länge der Seriennummer ungleich Null ist.

Auf die einzelnen Elemente der Struktur können wir ähnlich wie bei Klasseninstanzen und Methoden mit dem Punktoperator zugreifen:

mfrc522.uid.size

Das Element size gehört zur Struktur uid, die sich wiederum in der Instanz mfrc522 befindet.

Ist die Größe ungleich Null, haben wir eine Seriennummer gelesen und geben diese jetzt aus. Die for-Schleife lassen wir dazu so lange laufen, bis die Laufvariable "i" kleiner als "mfrc522.uid.size" also der Länge der Seriennummer ist. Am Ende wird noch der Wert für "select acknowledge" ausgegeben.

Probieren wir das Programm aus, erhalten wir für unterschiedliche Tags die jeweiligen Ausgaben:



Die Länge der Seriennummern ist beim Mifare Classic 4 Byte, beim Mifare Ultralight sind es 7 Byte. Danach werden die Seriennummern ausgegeben und dann folgt noch eine "8" als SAK beim Mifare Classic so wie es das Datenblatt voraussagt, beim Mifare Ultralight ist die Sache etwas anders, hier bekommen wir in diesem Fall ein "0".

Im nächsten Schritt wollen wir uns dann dem Speicher des Tags nähern.