Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Münzzähler "Hilitand Münz-Timer" programmiert auf 50 Cent , 1 € und 2 € Stücke
- // Eingeworfene Münze erzeugt Signale am Coin Ausgang des Münzzähler
- // Dieser wird am Digital input 2 des Arduino per Interrupt eingelesen und asgewertet
- // in selection() wird eine Korrektur eventueller Fehlzählungen durchgeführt
- // Ab hier kann man Schalten und Lassen wie man möchte
- float count = 0.00; // Münzzähler korrigiert
- float countr = 0.00; // Münzzähler original Signal ausgang am Coin
- unsigned long currentMillis = millis(); // aktueller Timer
- int firstcoinsignal = LOW; // wurde ein erstes Signal vom Münzzähler erkannt ?
- int betrag = LOW; // soll der Einbezahlte Betrag ausgegeben werden ?
- float cash = 0.00; // Summe die bisher eigeworfen wurde
- float munze = 0.00;// Eingeworfene Münze in Euro
- int lastcoinsignal = 0;// Timer seit dem das letzte mal ein Signal am D2 angekommen ist
- int tdls = 0; // Zeitdifferenz zwischen aktuellem Timer und letztem Signal Empfang
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600); // Möglichkeit zum Text Ausgeben auf dem seriellen Monitor
- pinMode(2, INPUT_PULLUP); // Kabel vom Münzzähler mit der bezeichnung Coin wird am Digital Eingang 2 angeschlossen
- attachInterrupt(digitalPinToInterrupt(2), coin, RISING ); // wenn am Digital Eingang 2 ein wert von LOW auf HIGH geht soll coin ausgeführt werden
- }
- void loop() {
- currentMillis = millis(); // aktueller Timer
- tdls = currentMillis - lastcoinsignal;
- 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 ...
- countr = count; // real ausgelesenen Signalzähler zwischenspreichern
- selection(); // ausgelesenen Signalzähler korregieren und Münze erkennen anschleißend Betrag aufzählen
- // Ausgabe am seriellen Monitor
- Serial.print("Münze: " + String(munze) + " Zähler original: " + String(countr) + " Zähler korregiert: " + String(count) + " Betrag: " + String(cash) + " \n");
- betrag = HIGH; // Betrag wurde am Bildschirm angezeigt
- firstcoinsignal = LOW; // Signal Flag auf LOW setzen damit wieder erstes Signal bei Interrupt ausgewertet werden kann
- }
- }
- void selection() { // Fehler am Signaleingang korregieren und eingeworfene Münze anhand Zähler berechnen
- if ((count >= 2.00 ) and ( count <= 4.00 )) {
- count = 3.00;
- munze = 0.50;
- }
- else if ((count >= 5.00 ) and ( count <= 7.00 )) {
- count = 6.00;
- munze = 1.00;
- }
- else if ((count >= 8.00 ) and ( count <= 10.00 )) {
- count = 9.00;
- munze = 2.00;
- }
- else {
- count = 0.00;
- munze = 0.00;
- }
- cash = cash + (munze); //Eingeworfenen Betrag aufaddieren
- }
- void coin() { // Interrupt wenn ein Signal am Digital Eingang 2 ankommt
- if (firstcoinsignal == LOW) { // wenn noch kein Signal erkannt wurde weitermachen
- firstcoinsignal = HIGH; // erstes Signal erkannt , Flag setzen
- betrag = LOW; // Flag für Textausgabe auf LOW setzen
- count = 0.00; // Signal auf null setzen (resetten)
- }
- if (firstcoinsignal == HIGH) { //wenn am eingang das Erste Signal erkannt wurde
- count = count + 1.00; //Signalzähler aufaddieren (Signalfluss ist da)
- lastcoinsignal = millis(); // letzter Timer als ein Signal erkannt wurde
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement