Advertisement
Seelenkind

Arduino coin counter 0.5 € ,1 € , 2 €

Jan 24th, 2020
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Münzzähler "Hilitand Münz-Timer" programmiert auf 50 Cent , 1 € und 2 € Stücke
  2. // Eingeworfene Münze erzeugt Signale am Coin Ausgang des Münzzähler
  3. // Dieser wird am Digital input 2 des Arduino per Interrupt eingelesen und asgewertet
  4. // in selection() wird eine Korrektur eventueller Fehlzählungen durchgeführt
  5. // Ab hier kann man Schalten und Lassen wie man möchte
  6.  
  7.  
  8.  
  9. float count = 0.00; // Münzzähler korrigiert
  10. float countr = 0.00; // Münzzähler original Signal ausgang am Coin
  11. unsigned long currentMillis = millis(); // aktueller Timer
  12. int firstcoinsignal = LOW; // wurde ein erstes Signal vom Münzzähler erkannt ?
  13. int betrag = LOW; // soll der Einbezahlte Betrag ausgegeben werden ?
  14. float cash = 0.00; // Summe die bisher eigeworfen wurde
  15. float munze = 0.00;// Eingeworfene Münze in Euro
  16. int lastcoinsignal = 0;// Timer seit dem das letzte mal ein Signal am D2 angekommen ist
  17. int tdls = 0; // Zeitdifferenz zwischen aktuellem Timer und letztem Signal Empfang
  18.  
  19.  
  20. void setup() {
  21.   // put your setup code here, to run once:
  22.   Serial.begin(9600); // Möglichkeit zum Text Ausgeben auf dem seriellen Monitor
  23.   pinMode(2, INPUT_PULLUP); // Kabel vom Münzzähler mit der bezeichnung Coin wird am Digital Eingang 2 angeschlossen
  24.   attachInterrupt(digitalPinToInterrupt(2), coin, RISING ); // wenn am Digital Eingang 2 ein wert von LOW auf HIGH geht soll coin ausgeführt werden
  25. }
  26.  
  27. void loop() {
  28.   currentMillis = millis(); // aktueller Timer
  29.   tdls = currentMillis - lastcoinsignal;
  30.   if (  (tdls > 300 ) and (betrag == LOW) )  { // wenn die maximale Zeit seit dem letzten Signal Empfang verstrichen ist und der eingeworfene Betrag noch nicht ausgegeben worden ist ...
  31.     countr = count; // real ausgelesenen Signalzähler zwischenspreichern
  32.     selection(); // ausgelesenen Signalzähler korregieren und Münze erkennen anschleißend Betrag aufzählen
  33.     // Ausgabe am seriellen Monitor
  34.     Serial.print("Münze: " + String(munze) + " Zähler original:  " + String(countr) + " Zähler korregiert: " + String(count) + " Betrag:  " + String(cash) + " \n");
  35.     betrag = HIGH; // Betrag wurde am Bildschirm angezeigt
  36.     firstcoinsignal = LOW; // Signal Flag auf LOW setzen damit wieder erstes Signal bei Interrupt ausgewertet werden kann
  37.   }
  38. }
  39.  
  40. void selection() { // Fehler am Signaleingang korregieren und eingeworfene Münze anhand Zähler berechnen
  41.  
  42.   if ((count >= 2.00 ) and ( count <= 4.00 )) {
  43.     count = 3.00;
  44.     munze = 0.50;
  45.   }
  46.   else if ((count >= 5.00 ) and ( count <= 7.00 )) {
  47.     count = 6.00;
  48.     munze = 1.00;
  49.   }
  50.   else if ((count >= 8.00 ) and ( count <= 10.00 )) {
  51.     count = 9.00;
  52.     munze = 2.00;
  53.   }
  54.   else {
  55.     count = 0.00;
  56.     munze = 0.00;
  57.   }
  58.  
  59.   cash = cash + (munze); //Eingeworfenen Betrag aufaddieren
  60. }
  61.  
  62. void coin() { // Interrupt wenn ein Signal am Digital Eingang 2 ankommt
  63.   if (firstcoinsignal == LOW) { // wenn noch kein Signal erkannt wurde weitermachen
  64.     firstcoinsignal = HIGH; // erstes Signal erkannt , Flag setzen
  65.     betrag = LOW; // Flag für Textausgabe auf LOW setzen
  66.     count = 0.00; // Signal auf null setzen (resetten)
  67.  
  68.   }
  69.  
  70.   if (firstcoinsignal == HIGH) { //wenn am eingang das Erste Signal erkannt wurde
  71.     count = count + 1.00; //Signalzähler aufaddieren (Signalfluss ist da)
  72.     lastcoinsignal = millis(); // letzter Timer als ein Signal erkannt wurde
  73.   }
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement