Die Chip-ID überprüfen und freigeben
Nun wollen wir mit dem RFID Chip eine Freigabe geben. Das heißt das Programm prüft, ob die Chip-ID/User ID bekannt ist und gibt nur in dem Fall ein ok für weitere Programmteile.
Dazu müssen wir zunächst eine oder mehrere UIDs kennen, welche die Freigabe bekommen sollen. Dazu gerne im vorherigen Abschnitt die UIDs aus dem SM abschreiben.
Erläuterung zum Arduino Programm
Hier wird jetzt ein Beispiel Programm erklärt, wie das Ablaufen kann. Das Programm baut auf dem letzten auf. Falls dazu Zeilen unklar sind, dann schaue nochmal auf der vorherigen Seite.
#include <SPI.h>
#include <MFRC522.h>
#define resetPin 22 //Reset Pin
#define ssPin 21 //Slave select Pin
MFRC522 T1_RFIDleser = MFRC522(ssPin, resetPin);
|
|
---|---|
const int UID_NR = 5;
byte registered_uid[UID_NR][4] =
{
{0x29, 0x97, 0xCE, 0xA3},
{0xB9, 0x25, 0x95, 0x99},
{}, //dritte
{}, //vierte
{} //fünfte
};
|
Mit dieser Konstante kann ausgewählt werden, wie viele UIDs gespeichert werden können sollen. Mit diesem 2 dimensionalen Array werden in diesem Fall 5 verschiedene Arrays mit je einer Größe von 4 Byte erstellt. Hier können dann die UIDs eingegeben werden, welche eine Freigabe bekommen sollen. Achtung: Hexadezimale Eingabe. |
void setup()
{
Serial.begin(115200);
SPI.begin();
T1_RFIDleser.PCD_Init();
T1_RFIDleser.PCD_DumpVersionToSerial();
}
void loop()
{
if(!T1_RFIDleser.PICC_IsNewCardPresent())
{
return;
}
if(!T1_RFIDleser.PICC_ReadCardSerial())
{
return;
}
T1_RFIDleser.PICC_DumpDetailsToSerial(&(T1_RFIDleser.uid));
|
|
Serial.print("Freigabe für die Aktuelle UID:");
Serial.println(UID_IsKnown());
}
|
Hier wird auf dem SM ausgegeben, ob eine Freigabe gegeben ist oder nicht. Dabei wird die Methode "UID_IsKnown()" aufgerufen, welche die empfangene UID prüft. |
boolean UID_IsKnown()
{
|
Gier wird die Methode "UID_IsKnown()" gestartet. Sie vergleicht die aktuell eingelesene UID mit dem Array der vorhandenen. |
boolean temp = false;
|
Diese Variable hilft bei der Überprüfung aller Bytes der UID. |
for(int uidNrIdx = 0; uidNrIdx < UID_NR; uidNrIdx++)
{
|
Hier ist eine Schleife, welche die Anzahl der vorhandenen UIDs durchläuft. |
for(int uidByteIdx = 0; uidByteIdx < 4; uidByteIdx++)
{
|
Hier ist eine Schleife, die einzelnen Bytes der UID durchläuft. |
if(registered_uid[uidNrIdx][uidByteIdx]
!= T1_RFIDleser.uid.uidByte[uidByteIdx])
|
Hier wird das aktuelle Byte der Schleife mit dem aktuellen Byte der eingelesenen UID verglichen. |
{
temp = false;
break;
}
|
Sind sie nicht identisch, so wird die Hilfsvariable auf "false" gesetzt und die Schleife verlassen. |
else
{
temp = true;
}
|
Sind sie identisch, so wird die Hilfsvariable auf "true" gesetzt und das nächste Byte mit Hilfe der Schleife durchlaufen. |
}
if(temp)
{
return true;
}
|
Hier wird geprüft, ob auch das letzte Byte der UID mit der gespeicherten übereinstimmt. Wenn ja, so wird das Programm verlassen und "true" (Freigabe) zurückgegeben. Wenn nicht, wird die nächste gespeicherte UID geprüft. |
}
return false;
}
|
Wenn keine der gespeicherten UIDs passen, so wird die Methode mit der Rückgabe "false" (keine Freigabe) verlassen. |
Last modified: Monday, 5 February 2024, 11:56 AM