meta data for this page
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
uebung:itt11:rfid_mit_mfc-rc522 [2023/01/13 14:57] – angelegt juergenhaasuebung:itt11:rfid_mit_mfc-rc522 [2023/01/21 13:07] (aktuell) juergenhaas
Zeile 4: Zeile 4:
  
  
-<code javascript RFID_MF-RC522.ino>+<code cpp RFID_MF-RC522.ino> 
 +/* 
 + * Bibliothek RFID_MFRC522v2 von GithubCommunity 
 + *  
 + * Anschlussbelegung: 
 + * ================== 
 + * NodeMCU | MF-RC522 
 +      D4 | SDA (SS) 
 +      D5 | SCK 
 +      D7 | MOSI 
 +      D6 | MISO (SCL) 
 +      D3 | RST 
 +      3V | 3V 
 +     GND | GND 
 +      
 + */ 
 + 
 +//#include <SPI.h>      // für SPI-Schnittstelle 
 +#include <MFRC522v2.h>  // für den Kartenleser 
 +#include <MFRC522DriverSPI.h> 
 +#include <MFRC522DriverPinSimple.h> 
 +#include <MFRC522Debug.h> 
 + 
 +#define DEBUG false  // auf true setzen für Debug-Ausgaben 
 + 
 +// Einstellungen für Kartenleser 
 +MFRC522DriverPinSimple ss_pin(D4); 
 +SPIClass &spiClass = SPI; 
 +const SPISettings spiSettings = SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0); 
 +MFRC522DriverSPI driver {ss_pin, spiClass, spiSettings}; 
 +MFRC522 mfrc522 {driver}; 
 + 
 + 
 +//byte cardUid[4];  // zum Einlesen der Karten-UID 
 +//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]);  // Anzahl gültiger Karten 
 +const unsigned long sameCardInterval = 5000;  // Intervall in dem die gleiche Karte nicht nochmal behandelt werden soll 
 +char lastCard[4];  // Variable für die zuletzt gelesene Karten-ID 
 +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("Version 1.1"); 
 +  MFRC522Debug::PCD_DumpVersionToSerial(mfrc522, Serial); 
 +  Serial.println("Setup abgeschlossen."); 
 +
 + 
 + 
 +/** 
 + * 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];  // Variable für die Karten-UID 
 +    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];  // je ein einzelnes Byte kopieren 
 +      if (thisCard[i] != lastCard[i])        // und auf Unterschied zur letzten Karte prüfen 
 +      { 
 +        sameAsLastCard = false; 
 +      }  
 +    } 
 + 
 + 
 +    // ausführen bei einer neuen Karte oder nach Ablauf des Wiederholungsintervalls 
 +    if (!sameAsLastCard || ((millis() - lastCardMillis) > sameCardInterval) ) 
 +    { 
 +      bool matchesSomeValidCard = false;  // Variable um zu speichern, ob diese Karte einer gültigen entspricht 
 + 
 +      // 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], HEX); 
 +        Serial.print(" "); 
 +      } 
 +      lastCardMillis = millis();  // Zeitstempel für das Widerholungsintervall merken 
 +      Serial.println(); 
 +       
 +      // alle gültigen Karten durchgehen 
 +      for (int i = 0; i < nrOfValidCards; i++) 
 +      { 
 +        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;  // merken, wenn ein Unterschied erkannt wurde 
 +          } 
 +        } 
 +        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("Card is valid"); 
 +      } 
 +      else 
 +      { 
 +        Serial.println("Card is NOT valid"); 
 +      } 
 +       
 +    }  // Ende neue Karte 
 +  }  // Ende Karte gelesen 
 +   
 + 
 +  if (DEBUG) 
 +  { 
 +    MFRC522Debug::PICC_DumpToSerial(mfrc522, Serial, &(mfrc522.uid)); 
 +  } 
 +   
 +  delay(100); 
 +}
  
 </code> </code>
  
 [[uebung:itt11:beispielcode_esp8266|zurück zur Übersicht]] [[uebung:itt11:beispielcode_esp8266|zurück zur Übersicht]]