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: | ||