KGBRUS

RFIDV2

Jul 31st, 2024
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.77 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. 4.0 Umgebaut auf nur einen TAG
  24. 5.0 PWM zur fahrstromsteuerung eingebaut
  25. */
  26. // Definition SPI
  27. #include <SPI.h> // SPI-Bibiothek hinzufügen
  28.  
  29. // Definition RFID
  30. #include <MFRC522.h> // MFRC Bibliothek hinzufügen
  31.  
  32. #define SDA PA4 // SPI Pinsdefiniern
  33. #define RST PB0 // SPI Pinsdefiniern
  34. MFRC522 mfrc522(SDA, RST);
  35.  
  36.  
  37. // definition LCD
  38. #include <LiquidCrystal.h>
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45. // Eingaenge
  46. const int LSEIN = PB14;
  47. const int Schneller = PA8;
  48. uint8_t SchnellerState = 0;
  49. const int Langsamer = PA9;
  50. uint8_t LangsamerState = 0;
  51.  
  52. // Ausgaenge
  53. const int LEDROT = PB12;
  54. const int LEDGELB = PB13;
  55. const int LEDBLAU = PB15;
  56. const int Fahrstrom = PA0;
  57. byte FahrstromState = 0; // Byte damit auf 0 bis 255 begrenzt
  58.  
  59. // Variablen
  60. int RundeRFID1 = 0;
  61. int RundeLS = 0;
  62. bool RFIDZahler1 = 0;
  63. bool LSZzahler1 = 0;
  64. uint8_t LSEINState = 0;
  65. uint8_t FehlerT1 = 0;
  66. String TESTStatus = "OK";
  67.  
  68. // LCD Ausgänge
  69. const int rs = PB11, en = PA1, d4 = PA2, d5 = PA3, d6 = PB1, d7 = PB10;
  70. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  71.  
  72.  
  73. // State Maschine
  74.  
  75. void setup()
  76. {
  77. SPI.begin(); // Init SPI bus
  78. mfrc522.PCD_Init(); // Init MFRC522 card
  79. pinMode(LEDROT, OUTPUT);
  80. pinMode(LEDGELB, OUTPUT);
  81. pinMode(LEDBLAU, OUTPUT);
  82. pinMode(Fahrstrom, OUTPUT);
  83. pinMode(LSEIN, INPUT);
  84. pinMode(Schneller, INPUT);
  85. pinMode(Langsamer, INPUT);
  86.  
  87.  
  88. lcd.clear();
  89. delay(1000);
  90. lcd.begin(20, 4); // Initialisierung LCD
  91. lcd.setCursor(0, 0);
  92. lcd.print("Hello World"); // Testanzeige LCD
  93. lcd.setCursor(0, 1);
  94.  
  95. digitalWrite (LEDROT, HIGH);
  96. digitalWrite (LEDGELB, HIGH);
  97. digitalWrite (LEDBLAU, HIGH);
  98. delay(1000);
  99. digitalWrite (LEDROT, LOW);
  100. digitalWrite (LEDGELB, LOW);
  101. digitalWrite (LEDBLAU, LOW);
  102. }
  103.  
  104. void loop()
  105.  
  106. {
  107. String WertDEZ;
  108. // --------------------------------------- Ansteuerung LCD
  109. lcd.setCursor(0, 0);
  110. lcd.print( "Tag Test laeuft !");
  111. lcd.setCursor(0, 1);
  112. lcd.print( "Tag = ");
  113. lcd.print(RundeRFID1); // Runde TAG
  114. lcd.setCursor(10, 1);
  115. lcd.print(" PWM = ");
  116. if (FahrstromState == 9 || FahrstromState == 99) // Anzeige beim runterzählen auf zweistellig setzten
  117. {
  118. lcd.print(" ");
  119. }
  120. lcd.setCursor(17, 1);
  121. lcd.print (FahrstromState);
  122. lcd.setCursor(0, 2);
  123. lcd.print("LSE = ");
  124. lcd.print(RundeLS); // Lichtschranke
  125. lcd.setCursor(0, 3);
  126. lcd.print("Teststatus = ");
  127. lcd.print(TESTStatus);
  128. // --------------------------------------- Auslesen Lichtschranke (Rundenreferenz)
  129. LSEINState = digitalRead(LSEIN); // Zuerst Lichtschranke aus lesen
  130. if (LSEINState == LOW)
  131. {
  132. digitalWrite(LEDGELB, HIGH);
  133. if (LSZzahler1 == 0) // nur eimal zaehlen
  134. {
  135. RundeLS = RundeLS + 1; // Variable Runde LS um 1 erhöhen
  136. LSZzahler1 = 1;
  137. }
  138. }
  139. else
  140. {
  141. digitalWrite(LEDGELB, LOW);
  142. LSZzahler1 = 0; // Wenn Lichtschranke frei Variable wieder auf zaehlen setzten
  143. }
  144. // --------------------------------------- Auslesen RFID Chip - BZW Empfänger
  145. if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) // Abfrage ob neuer Tag & andere ID am Empfänger ist
  146. {
  147.  
  148. for (byte i = 0; i < mfrc522.uid.size; i++) // ID Dezimal-Wert in Strings schreiben
  149. {
  150. WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " "; // String zusammenbauen
  151. }
  152. WertDEZ.trim(); // trim() -> Leerzeichen am Ende des Strings entfernen
  153.  
  154. delay(500); // Delay damit nur einmal ausgelesen wird (Anzeige flackert so nicht hier ggf anpassen bei hohen geschwindigkeiten in der Testrunde
  155. }
  156. // --------------------------------------- Vergleich, was passiert bei welcher RFID
  157.  
  158. if (WertDEZ == "86 86 36 73")
  159. {
  160. digitalWrite(LEDROT, HIGH);
  161. if (RFIDZahler1 == 0) // Wenn noch nicht gezählt (Damit nur einmal gezählt wird)
  162. {
  163. RundeRFID1 = RundeRFID1 + 1; // Variable RundeRFID1 um 1 erhöhen
  164. RFIDZahler1 = 1; // Wenn RFID Chip entnommen, dann Zaeler auf ungezaehlt setzten
  165. }
  166. }
  167. else
  168. {
  169. digitalWrite(LEDROT, LOW);
  170. RFIDZahler1 = 0;
  171. }
  172. // --------------------------------------- Fehlermeldungen
  173.  
  174. FehlerT1 = RundeRFID1 - RundeLS; // Differenz zwischen RindeRFI1 und Runde LS
  175. if (FehlerT1 > 1)
  176. {
  177. TESTStatus = "Fehler";
  178. digitalWrite(LEDBLAU, HIGH);
  179. }
  180. {
  181. // ---------------- Regelung geschwindigkeit
  182. SchnellerState = digitalRead(Schneller);
  183. LangsamerState = digitalRead(Langsamer);
  184.  
  185. if (SchnellerState == 0 && FahrstromState < 255) // Taste schneller gedrückt aber Wert kleiner 255
  186. {
  187. FahrstromState = FahrstromState + 1; // Fahrstrom um 1 erhöhen
  188.  
  189. }
  190. if (LangsamerState == 0 && FahrstromState > 0)
  191. {
  192. FahrstromState = FahrstromState - 1;
  193. }
  194.  
  195. analogWriteFrequency(100);
  196. analogWrite(Fahrstrom, FahrstromState);
  197.  
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment