meta data for this page
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
uebung:itt11:rfid_mit_mfc-rc522 [2023/01/13 14:57] – angelegt juergenhaas | uebung:itt11:rfid_mit_mfc-rc522 [2023/01/21 13:07] (aktuell) – juergenhaas | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
- | < | + | < |
+ | /* | ||
+ | * Bibliothek RFID_MFRC522v2 von GithubCommunity | ||
+ | * | ||
+ | * Anschlussbelegung: | ||
+ | * ================== | ||
+ | * NodeMCU | MF-RC522 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | |||
+ | //#include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define DEBUG false // auf true setzen für Debug-Ausgaben | ||
+ | |||
+ | // Einstellungen für Kartenleser | ||
+ | MFRC522DriverPinSimple ss_pin(D4); | ||
+ | SPIClass & | ||
+ | const SPISettings spiSettings = SPISettings(SPI_CLOCK_DIV4, | ||
+ | MFRC522DriverSPI driver {ss_pin, spiClass, spiSettings}; | ||
+ | MFRC522 mfrc522 {driver}; | ||
+ | |||
+ | |||
+ | //byte cardUid[4]; | ||
+ | //bool readSuccessful = false; | ||
+ | //int idleCount = 0; | ||
+ | |||
+ | const char validCards[2][4] = { // Datenstruktur mit gültigen Karten-IDs | ||
+ | {0xE6, 0xE8, 0x3A, 0xF8}, | ||
+ | {0x39, 0x6E, 0xAF, 0x47} | ||
+ | }; | ||
+ | const char nrOfValidCards = sizeof(validCards) / sizeof(validCards[0]); | ||
+ | const unsigned long sameCardInterval = 5000; // Intervall in dem die gleiche Karte nicht nochmal behandelt werden soll | ||
+ | char lastCard[4]; | ||
+ | unsigned long lastCardMillis = 0; // Variable zur Speicherung des Zeitstempels für das sameCardInterval | ||
+ | |||
+ | |||
+ | /** | ||
+ | * setup | ||
+ | */ | ||
+ | void setup() { | ||
+ | // Kartenleser initialisieren | ||
+ | mfrc522.PCD_Init(); | ||
+ | delay(100); | ||
+ | |||
+ | // Serielle Konsole aktivieren und Versionsinfo ausgeben | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(); | ||
+ | Serial.println(" | ||
+ | MFRC522Debug:: | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | |||
+ | /** | ||
+ | * loop | ||
+ | */ | ||
+ | void loop() | ||
+ | { | ||
+ | // falls keine Karte erkannt wird oder gelesen werden kann, dann von vorne | ||
+ | if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) | ||
+ | { | ||
+ | return; | ||
+ | } | ||
+ | else // weiter falls Karte gelesen | ||
+ | { | ||
+ | char thisCard[4]; | ||
+ | bool sameAsLastCard = true; // Variable um zu speichern, ob das eine neue Karte ist | ||
+ | |||
+ | |||
+ | // Karten-UID in lokale Variable übertragen und erkennen, ob es eine neue ist | ||
+ | for (int i = 0; i < 4; i++) | ||
+ | { | ||
+ | thisCard[i] = mfrc522.uid.uidByte[i]; | ||
+ | if (thisCard[i] != lastCard[i]) | ||
+ | { | ||
+ | sameAsLastCard = false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // ausführen bei einer neuen Karte oder nach Ablauf des Wiederholungsintervalls | ||
+ | if (!sameAsLastCard || ((millis() - lastCardMillis) > sameCardInterval) ) | ||
+ | { | ||
+ | bool matchesSomeValidCard = false; | ||
+ | |||
+ | // UID der neu gelesenen Karte merken, um sie nicht mehrmals hintereinander zu prüfen | ||
+ | // und Ausgabe der ID der neu erkannten Karte | ||
+ | for (int i = 0; i < 4; i++) | ||
+ | { | ||
+ | lastCard[i] = thisCard[i]; | ||
+ | Serial.print(thisCard[i], | ||
+ | Serial.print(" | ||
+ | } | ||
+ | lastCardMillis = millis(); | ||
+ | Serial.println(); | ||
+ | |||
+ | // alle gültigen Karten durchgehen | ||
+ | for (int i = 0; i < nrOfValidCards; | ||
+ | { | ||
+ | bool matchesThisValidCard = true; // Variable um zu speichern, ob dieser gültigen entspricht | ||
+ | // Karten byteweise vergleichen | ||
+ | for (int j = 0; j < 4; j++) | ||
+ | { | ||
+ | if (thisCard[j] != validCards[i][j]) | ||
+ | { | ||
+ | matchesThisValidCard = false; | ||
+ | } | ||
+ | } | ||
+ | if (matchesThisValidCard) | ||
+ | { | ||
+ | matchesSomeValidCard = true; // merken, dass diese Karte einer gültigen Karte entspricht | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Erkennen einer gültigen oder ungültigen Karte ausgeben | ||
+ | if (matchesSomeValidCard) | ||
+ | { | ||
+ | Serial.println(" | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | } // Ende neue Karte | ||
+ | } // Ende Karte gelesen | ||
+ | |||
+ | |||
+ | if (DEBUG) | ||
+ | { | ||
+ | MFRC522Debug:: | ||
+ | } | ||
+ | |||
+ | delay(100); | ||
+ | } | ||
</ | </ | ||
[[uebung: | [[uebung: |