Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Typical pin layout used:
- --------------------------------------------------------------------------------------------------------
- MFRC522 Arduino Arduino Arduino Arduino Arduino Arduino
- Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro Blue Pill
- Signal Pin Pin Pin Pin Pin Pin PIN
- --------------------------------------------------------------------------------------------------------
- RST/Reset RST 9 5 D9 RESET/ICSP-5 RST B0
- SPI SS SDA(SS) 10 53 D10 3 10 PA4
- IRQ ? ? ? ? 2 10 ?
- SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 PA7
- SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 PA6
- SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 PA5
- More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout
- 1.0 Aus RFID Test3_0 erstellt
- zweite LED eingefügt
- 2.0 Die Abfrage nach der Lichtschranke muß vor der If - return schleife kommen. If - return immer ans ende des Codes..
- 3.0 LED Zur Fehlererkennung eingepflegt
- */
- // Definition SPI
- #include <SPI.h> // SPI-Bibiothek hinzufügen
- // Definition RFID
- #include <MFRC522.h> // MFRC Bibliothek hinzufügen
- #define SDA PA4 // SPI Pinsdefiniern
- #define RST PB0 // SPI Pinsdefiniern
- MFRC522 mfrc522(SDA, RST);
- // definition LCD
- #include <LiquidCrystal.h>
- // Eingaenge
- const int LSEIN = PB14;
- // Ausgaenge
- const int LEDGRUN = PB11;
- const int LEDROT = PB12;
- const int LEDGELB = PB13;
- const int LEDBLAU = PB15;
- const int LEDORANGE = PA8;
- // Variablen
- uint8_t RundeRFID1 = 0;
- uint8_t RundeRFID2 = 0;
- uint8_t RundeLS = 0;
- bool RFIDZahler1 = 0;
- bool RFIDZahler2 = 0;
- bool LSZzahler1 = 0;
- uint8_t LSEINState = 0;
- uint8_t FehlerT1 = 0;
- uint8_t FehlerT2 = 0;
- // LCD Ausgänge
- const int rs = PA0, en = PA1, d4 = PA2, d5 = PA3, d6 = PB1, d7 = PB10;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- // State Maschine
- void setup()
- {
- SPI.begin(); // Init SPI bus
- mfrc522.PCD_Init(); // Init MFRC522 card
- pinMode(LEDGRUN, OUTPUT);
- pinMode(LEDROT, OUTPUT);
- pinMode(LEDGELB, OUTPUT);
- pinMode(LEDBLAU, OUTPUT);
- pinMode(LEDORANGE, OUTPUT);
- pinMode(LSEIN, INPUT);
- lcd.clear();
- delay(1000);
- lcd.begin(20, 4); // Initialisierung LCD
- lcd.setCursor(0, 0);
- lcd.print("Hello World"); // Testanzeige LCD
- lcd.setCursor(0, 1);
- digitalWrite (LEDGRUN, HIGH);
- digitalWrite (LEDROT, HIGH);
- digitalWrite (LEDGELB, HIGH);
- delay(500);
- digitalWrite (LEDGRUN, LOW);
- digitalWrite (LEDROT, LOW);
- digitalWrite (LEDGELB, LOW);
- digitalWrite (LEDBLAU, HIGH);
- digitalWrite (LEDORANGE, HIGH);
- delay(500);
- digitalWrite (LEDBLAU, LOW);
- digitalWrite (LEDORANGE, LOW);
- }
- void loop()
- {
- String WertDEZ;
- // --------------------------------------- Ansteuerung LCD
- lcd.setCursor(0, 0);
- lcd.print(WertDEZ); // Kennung dezimal anzeigen
- lcd.setCursor(0, 4); // Anzahl der einzelnen Zaehlungen anzeigen
- lcd.print( "T1=");
- lcd.print(RundeRFID1); // Chip 1
- lcd.print(" ");
- lcd.print("T2=");
- lcd.print(RundeRFID2); // Chip 2
- lcd.print(" ");
- lcd.print("LS=");
- lcd.print(RundeLS); // Lichtschranke
- // --------------------------------------- Auslesen Lichtschranke (Rundenreferenz)
- LSEINState = digitalRead(LSEIN); // Zuerst Lichtschranke aus lesen
- if (LSEINState == LOW)
- {
- digitalWrite(LEDGELB, HIGH);
- if (LSZzahler1 == 0) // nur eimal zaehlen
- {
- RundeLS = RundeLS + 1; // Variable Runde LS um 1 erhöhen
- LSZzahler1 = 1;
- }
- }
- else
- {
- digitalWrite(LEDGELB, LOW);
- LSZzahler1 = 0; // Wenn Lichtschranke frei Variable wieder auf zaehlen setzten
- }
- // --------------------------------------- Auslesen RFID Chip - BZW Empfänger
- if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) // Abfrage ob neuer Tag & andere ID am Empfänger ist
- {
- for (byte i = 0; i < mfrc522.uid.size; i++) // ID Dezimal-Wert in Strings schreiben
- {
- WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " "; // String zusammenbauen
- }
- WertDEZ.trim(); // trim() -> Leerzeichen am Ende des Strings entfernen
- {
- lcd.clear(); // LCD löchen damit vorherige Nr gelöscht wird
- lcd.setCursor(0, 0); // Curser in Position 0 in Zeile 0 setzten
- lcd.print(WertDEZ); // ID Des Tags anzeigen
- }
- delay(1000); // Delay damit nur einmal ausgelesen wird (Anzeige flackert so nicht hier ggf anpassen bei hohen geschwindigkeiten in der Testrunde
- }
- // --------------------------------------- Vergleich, was passiert bei welcher RFID
- if (WertDEZ == "163 90 21 20")
- {
- digitalWrite(LEDGRUN, HIGH);
- if (RFIDZahler1 == 0) // Wenn noch nicht gezählt (Damit nur einmal gezählt wird)
- {
- RundeRFID1 = RundeRFID1 + 1; // Variable RundeRFID1 um 1 erhöhen
- RFIDZahler1 = 1; // Zaehler auf gezahlt setzten.
- }
- }
- else
- {
- digitalWrite(LEDGRUN, LOW);
- RFIDZahler1 = 0; // Wenn RFID Chip entnommen, dann Zaeler auf ungezaehlt setzten
- }
- if (WertDEZ == "4 55 126 202 32 18 145")
- {
- digitalWrite(LEDROT, HIGH);
- if (RFIDZahler2 == 0) // Wenn noch nicht gezählt (Damit nur einmal gezählt wird)
- {
- RundeRFID2 = RundeRFID2 + 1; // Variable RundeRFID2 um 1 erhöhen
- RFIDZahler2 = 1; // Wenn RFID Chip entnommen, dann Zaeler auf ungezaehlt setzten
- }
- }
- else
- {
- digitalWrite(LEDROT, LOW);
- RFIDZahler2 = 0;
- }
- // --------------------------------------- Fehlermeldungen
- FehlerT1 = RundeRFID1 - RundeLS; // Differenz zwischen RindeRFI1 und Runde LS
- if (FehlerT1 > 1)
- {
- digitalWrite(LEDBLAU, HIGH);
- }
- FehlerT2 = RundeRFID2 - RundeLS; // Differenz zwischen RindeRFI1 und Runde LS
- if (FehlerT2 > 1)
- {
- digitalWrite(LEDORANGE, HIGH);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment