Ja.
Da fällt mir gerade auf: Mach mal ein unsigned long draus.
So habe ich den Code gesehen
const byte UIDLange = 4;
const byte UIDReihenfolge[][UIDLange] = {
{0x04, 0xAF, 0x10, 0xCA},
{0xA5, 0x23, 0x15, 0xDB},
{0x09, 0xD9, 0x84, 0x35},
// ...
};
const byte reihenfolgeCount = sizeof UIDReihenfolge / sizeof UIDReihenfolge[0];
byte erwarteteKarte = 0;
enum : byte {KEINE_TAG, RICHTIGES_TAG, FALSCHE_TAG};
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
void printUID(byte *uid) {
for (byte i = 0; i < UIDLange; i++) {
Serial.print(F("0x"));
if (uid[i] < 0x10) Serial.write('0');
Serial.print(uid[i], HEX);
if (i < UIDLange - 1) Serial.write(',');
}
}
void vorbereiten() {
erwarteteKarte = 0; // Fang nochmal an
Serial.println(F("Fang nochmal an."));
}
byte nachsteKarteGefunden() {
byte ergebnis = KEINE_TAG;
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
printUID(rfid.uid.uidByte);
ergebnis = memcmp(rfid.uid.uidByte, UIDReihenfolge[erwarteteKarte], UIDLange) ? FALSCHE_TAG : RICHTIGES_TAG;
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
return ergebnis;
}
void tagErkennung() {
switch (nachsteKarteGefunden()) {
case KEINE_TAG: break;
case RICHTIGES_TAG:
Serial.println(F(" ist richtig. :-)"));
if (++erwarteteKarte >= reihenfolgeCount) {
Serial.println(F("Bingo, du hast die richtige Reihenfolge. Gut gemacht!!!"));
vorbereiten(); // Fang nochmal an
}
break;
case FALSCHE_TAG:
Serial.println(F(" ist falsch. Du hast verloren. :-("));
vorbereiten(); // Fang nochmal an
break;
}
}
void setup() {
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();
Serial.println(F("\nBereit"));
}
void loop() {
tagErkennung();
}
1 Like
long code = 0;
for (byte i = 0; i < mfrc522.uid.size; i++) {
code = ((code + mfrc522.uid.uidByte[i]) * 10);
}
ist ganz falsch... * 256 wäre viel besser... (in einem unsigned long wenn die mfrc522.uid.size <= 4 . ist) ➜ Die Verwendung von memcmp() ist wahrscheinlich besser geeignet und generisch
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.