Warten auf RFID Input

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.