KGBRUS

RFID in Bewegung Testprogramm

Jul 16th, 2024
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.24 KB | None | 0 0
  1. /**
  2.  
  3. Typical pin layout used:
  4. --------------------------------------------------------------------------------------------------------
  5. MFRC522 Arduino Arduino Arduino Arduino Arduino Arduino
  6. Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro Blue Pill
  7. Signal Pin Pin Pin Pin Pin Pin PIN
  8. --------------------------------------------------------------------------------------------------------
  9. RST/Reset RST 9 5 D9 RESET/ICSP-5 RST B0
  10. SPI SS SDA(SS) 10 53 D10 3 10 PA4
  11. IRQ ? ? ? ? 2 10 ?
  12. SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 PA7
  13. SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 PA6
  14. SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 PA5
  15.  
  16. More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout
  17.  
  18.  
  19. 1.0 Aus RFID Test3_0 erstellt
  20. zweite LED eingefügt
  21. 2.0 Die Abfrage nach der Lichtschranke muß vor der If - return schleife kommen. If - return immer ans ende des Codes..
  22. 3.0 LED Zur Fehlererkennung eingepflegt
  23.  
  24. */
  25. // Definition SPI
  26. #include <SPI.h> // SPI-Bibiothek hinzufügen
  27.  
  28. // Definition RFID
  29. #include <MFRC522.h> // MFRC Bibliothek hinzufügen
  30.  
  31. #define SDA PA4 // SPI Pinsdefiniern
  32. #define RST PB0 // SPI Pinsdefiniern
  33. MFRC522 mfrc522(SDA, RST);
  34.  
  35.  
  36. // definition LCD
  37. #include <LiquidCrystal.h>
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. // Eingaenge
  45. const int LSEIN = PB14;
  46.  
  47. // Ausgaenge
  48. const int LEDGRUN = PB11;
  49. const int LEDROT = PB12;
  50. const int LEDGELB = PB13;
  51. const int LEDBLAU = PB15;
  52. const int LEDORANGE = PA8;
  53.  
  54.  
  55.  
  56. // Variablen
  57.  
  58. uint8_t RundeRFID1 = 0;
  59. uint8_t RundeRFID2 = 0;
  60. uint8_t RundeLS = 0;
  61. bool RFIDZahler1 = 0;
  62. bool RFIDZahler2 = 0;
  63. bool LSZzahler1 = 0;
  64. uint8_t LSEINState = 0;
  65. uint8_t FehlerT1 = 0;
  66. uint8_t FehlerT2 = 0;
  67.  
  68. // LCD Ausgänge
  69. const int rs = PA0, en = PA1, d4 = PA2, d5 = PA3, d6 = PB1, d7 = PB10;
  70. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  71.  
  72. // State Maschine
  73.  
  74. void setup()
  75. {
  76. SPI.begin(); // Init SPI bus
  77. mfrc522.PCD_Init(); // Init MFRC522 card
  78. pinMode(LEDGRUN, OUTPUT);
  79. pinMode(LEDROT, OUTPUT);
  80. pinMode(LEDGELB, OUTPUT);
  81. pinMode(LEDBLAU, OUTPUT);
  82. pinMode(LEDORANGE, OUTPUT);
  83. pinMode(LSEIN, INPUT);
  84.  
  85. lcd.clear();
  86. delay(1000);
  87. lcd.begin(20, 4); // Initialisierung LCD
  88. lcd.setCursor(0, 0);
  89. lcd.print("Hello World"); // Testanzeige LCD
  90. lcd.setCursor(0, 1);
  91. digitalWrite (LEDGRUN, HIGH);
  92. digitalWrite (LEDROT, HIGH);
  93. digitalWrite (LEDGELB, HIGH);
  94. delay(500);
  95. digitalWrite (LEDGRUN, LOW);
  96. digitalWrite (LEDROT, LOW);
  97. digitalWrite (LEDGELB, LOW);
  98. digitalWrite (LEDBLAU, HIGH);
  99. digitalWrite (LEDORANGE, HIGH);
  100. delay(500);
  101. digitalWrite (LEDBLAU, LOW);
  102. digitalWrite (LEDORANGE, LOW);
  103. }
  104.  
  105. void loop()
  106.  
  107. {
  108. String WertDEZ;
  109. // --------------------------------------- Ansteuerung LCD
  110. lcd.setCursor(0, 0);
  111. lcd.print(WertDEZ); // Kennung dezimal anzeigen
  112. lcd.setCursor(0, 4); // Anzahl der einzelnen Zaehlungen anzeigen
  113. lcd.print( "T1=");
  114. lcd.print(RundeRFID1); // Chip 1
  115. lcd.print(" ");
  116. lcd.print("T2=");
  117. lcd.print(RundeRFID2); // Chip 2
  118. lcd.print(" ");
  119. lcd.print("LS=");
  120. lcd.print(RundeLS); // Lichtschranke
  121.  
  122. // --------------------------------------- Auslesen Lichtschranke (Rundenreferenz)
  123. LSEINState = digitalRead(LSEIN); // Zuerst Lichtschranke aus lesen
  124. if (LSEINState == LOW)
  125. {
  126. digitalWrite(LEDGELB, HIGH);
  127. if (LSZzahler1 == 0) // nur eimal zaehlen
  128. {
  129. RundeLS = RundeLS + 1; // Variable Runde LS um 1 erhöhen
  130. LSZzahler1 = 1;
  131. }
  132. }
  133. else
  134. {
  135. digitalWrite(LEDGELB, LOW);
  136. LSZzahler1 = 0; // Wenn Lichtschranke frei Variable wieder auf zaehlen setzten
  137. }
  138. // --------------------------------------- Auslesen RFID Chip - BZW Empfänger
  139. if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) // Abfrage ob neuer Tag & andere ID am Empfänger ist
  140. {
  141.  
  142. for (byte i = 0; i < mfrc522.uid.size; i++) // ID Dezimal-Wert in Strings schreiben
  143. {
  144. WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " "; // String zusammenbauen
  145. }
  146. WertDEZ.trim(); // trim() -> Leerzeichen am Ende des Strings entfernen
  147. {
  148. lcd.clear(); // LCD löchen damit vorherige Nr gelöscht wird
  149. lcd.setCursor(0, 0); // Curser in Position 0 in Zeile 0 setzten
  150. lcd.print(WertDEZ); // ID Des Tags anzeigen
  151. }
  152. delay(1000); // Delay damit nur einmal ausgelesen wird (Anzeige flackert so nicht hier ggf anpassen bei hohen geschwindigkeiten in der Testrunde
  153. }
  154. // --------------------------------------- Vergleich, was passiert bei welcher RFID
  155. if (WertDEZ == "163 90 21 20")
  156. {
  157. digitalWrite(LEDGRUN, HIGH);
  158. if (RFIDZahler1 == 0) // Wenn noch nicht gezählt (Damit nur einmal gezählt wird)
  159. {
  160. RundeRFID1 = RundeRFID1 + 1; // Variable RundeRFID1 um 1 erhöhen
  161. RFIDZahler1 = 1; // Zaehler auf gezahlt setzten.
  162. }
  163. }
  164. else
  165. {
  166. digitalWrite(LEDGRUN, LOW);
  167. RFIDZahler1 = 0; // Wenn RFID Chip entnommen, dann Zaeler auf ungezaehlt setzten
  168. }
  169. if (WertDEZ == "4 55 126 202 32 18 145")
  170. {
  171. digitalWrite(LEDROT, HIGH);
  172. if (RFIDZahler2 == 0) // Wenn noch nicht gezählt (Damit nur einmal gezählt wird)
  173. {
  174. RundeRFID2 = RundeRFID2 + 1; // Variable RundeRFID2 um 1 erhöhen
  175. RFIDZahler2 = 1; // Wenn RFID Chip entnommen, dann Zaeler auf ungezaehlt setzten
  176. }
  177. }
  178. else
  179. {
  180. digitalWrite(LEDROT, LOW);
  181. RFIDZahler2 = 0;
  182. }
  183. // --------------------------------------- Fehlermeldungen
  184.  
  185. FehlerT1 = RundeRFID1 - RundeLS; // Differenz zwischen RindeRFI1 und Runde LS
  186. if (FehlerT1 > 1)
  187. {
  188. digitalWrite(LEDBLAU, HIGH);
  189. }
  190.  
  191. FehlerT2 = RundeRFID2 - RundeLS; // Differenz zwischen RindeRFI1 und Runde LS
  192. if (FehlerT2 > 1)
  193. {
  194. digitalWrite(LEDORANGE, HIGH);
  195. }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment