Arduino mit MFRC522-Reader

Arduino mit MFRC522-Reader

Die Karte meldet sich

Jetzt wollen wir aber endlich Kontakt mit der Karte aufnehmen und nicht nur mit dem Reader. Wir wissen, das wir dazu einen Request senden müssen. Wir schauen uns die Headerdatei "MFRC522.h" an, die sich im "libraries"-Ordner unserer Arduino-Installation befindet und finden die Methode:

byte PICC_RequestA(byte *bufferATQA, byte *bufferSize);

Das scheint genau das zu sein, was wir suchen. Wir übergeben die Adresse eines Puffers und die Adresse einer Variablen, in der sich die Länge des Puffers befindet. Außerdem ändert sich durch den Aufruf der Zustand der Karte von "IDLE" in "READY". Nach dem erfolgreichen Aufruf erhalten wir einen Rückgabewert, mit der Anzahl der übertragenen Bytes und in "bufferATQA" (oder wie immer wir ihn nennen) sollte sich dann der ATQA-Block befinden. Probieren wir es aus:



Der Anfang ist bekannt, wir legen lediglich 2 Variablen an, nämlich einmal unser ATQA-Array mit 2 Byte und die Variable "atqaLen" für die Länge, die wir auch sofort über die Funktion "sizeof()" initialisieren.

Danach rufen wir die Init-Methode auf und im loop-Teil unseres Programms führen wir eine Request aus. Danach folgt die Ausgabe, um welchen Chip es sich handelt:

Bei 00 04 ist eine eine Mifare Classic Karte, lesen wir eine 00 44 war es die Variante mit Mifare Ultralight oder Ultralight C.

Danach müssen wir das Array noch löschen, sonst würde die Ausgabe ständig wiederholt, auch wenn sich kein Chip mehr im Empfangsbereich befindet.

Schauen wir uns an, was passiert:



Wenn Sie den Chip auf dem Reader belassen, dann erfolgt ständig eine Ausgabe. Das ist aber für die meisten Fälle nicht sinnvoll. Stellen Sie sich vor, Sie haben eine Karte für den Skilift, deren Kontostand jedes Mal beim Durchlaufen um 1 erniedrigt wird. Wenn Sie bei unserer Version allerdins zu langsam sind, zählt er Ihren Kontostand sofort auf Null herunter. Die Karte müsste also nur beim Eintritt reagieren und danach nicht mehr. Wir müssten die Karte also nach der Ausgabe deaktivieren.

Wir suchen in der Header-Datei nach einer passenden Methode und finden PICC_HaltA, die passend scheint. Fügen Sie die Zeile hinter der Ausgabe ein und testen Sie das Programm. Doch alles bleibt wie gehabt und das liegt an einem Mechanismus, den wir im Kapitel über die S50-Karte schon angesprochen haben: Wir haben es mit einer Zustandsmaschine zu tun und nach einem Request befinden wir uns im Zustand "READY" und von dem führt gar kein direkter Weg in den Zustand "HALT". Das ist auch nicht schlimm, denn mit der Ausgabe von ATQA passiert ja nocht nicht wirklich etwas. Wir haben noch gar keinen Zugriff auf den Speicher und die Karte ist auch immer noch nicht aktiviert.