Follow me on Twitter!

Programmierung eines Kaffeeautomaten – Teil 2

 Kategorien:              Mikrocontroller


Wie versprochen möchte ich diese Folge mit einer möglichen Lösung der Programmieraufgabe für die Zähleinrichtung beginnen.

Wie so häufig, gibt es viele Wege, die nach Rom führen.

Meine Lösung ist also nicht die einzige und sehr wahrscheinlich auch nicht die beste und schönste Lösung, die man sich vorstellen kann.

Here we are …


Für den Fall dass Du den Code einmal ausprobieren möchtest, aber nicht alles abtippen willst, kopiere ich das C-Programm einmal hierher:

P1=0;
printf(“Los gehts..”);

while(1){

switch (P1)
{
case 1:
printf(“Betrag: %d Cent”, Betrag+=1);
P1=0;
break;

case 2:
printf(“Betrag: %d Cent”, Betrag+=2);
P1=0;
break;

case 4:
printf(“Betrag: %d Cent”, Betrag+=5);
P1=0;
break;

case 8:
printf(“Betrag: %d Cent”, Betrag+=10);
P1=0;
break;

case 16:
printf(“Betrag: %d Cent”, Betrag+=20);
P1=0;
break;

case 32:
printf(“Betrag: %d Cent”, Betrag+=50);
P1=0;
break;

case 64:
printf(“Betrag: %d Cent”, Betrag+=100);
P1=0;
break;

case 128:
printf(“Betrag: %d Cent”, Betrag+=200);
P1=0;
break;

}
printf(“n”);
getchar();  // damit das Programm hier wartet

Dies soll nur eine mögliche Lösung sein. Es gibt sicher noch elegantere Lösungen, die beispielsweise ohne das getchar() auskommen, damit dieses lästige Wechseln des Eingabefensters wegfällt.

So könnte man z.B. eine Warteschleife

while(P1==0);

einbauen und somit darauf warten, ob überhaupt eine Münze eingeworfen wurde.

Kaffeeausgabe

Im zweiten Teil der Aufgabe soll natürlich auch die Kaffeeausgabe überwacht werden.

Unser Kaffeeautomat bietet 3 Getränke

  • Kaffee 30 Ct
  • Espresso 40 Ct
  • Cappuchino 50 Ct

Die Wahl des Getränks soll über die Buchstaben “k” für Kaffee, “e” für Espresso und “c” für Cappuchino über die Tastatur erfolgen.

Bei Wahl des entsprechenden Getränks muss der Betrag natürlich wieder vom Guthaben abgezogen werden.

Ergänze also Dein Programm um diese Funktionalität.

Bis zum nächsten Mal!

Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.
[ >> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses .]


Ähnliche Artikel

Folgende Artikel aus der gleichen Kategorie könnten Dich ebenfalls interessieren:

Keinen passenden
Artikel gefunden...?


... dann hilft vielleicht
die Suche!

Programmierung der Getränkeausgabe In der vergangenen Woche haben wir eine mögliche Lösung für eine Zähleinrichtung der Geldeingabe für...

Geschachtelte for-Schleife Im letzten Artikel hast Du die Schleifen-Programmierung mit „for“ kennengelernt. Die Aufgabe für heu...

Programmierung eines Kaffeeautomaten In den vergangenen Folgen haben wir uns um die absoluten Grundlagen der Programmiersprache „C“ gekü...

Funktionen in C Ähnliche oder gleiche Befehle, die öfter genutzt werden kann man besser in Funktionen ausgliedern. F...

Schleifen mit for Dies ist nun der dritte Artikel, der sich mit der Programmierung von Schleifen beschäftigt. Neben de...

3 Kommentare
Hier kannst Du den Artikel kommentieren: »

  1. Hallo Wolfgang,
    eine Frage zum Verständnis:
    Soll zuerst gewählt und dann gezahlt oder
    zuerst gezahlt und dann gewählt werden oder
    sind beide Systeme zugelassen?
    (In der Automatentechnik gibt es beide Systeme:
    Zahlen – Wählen – Nehmen oder
    Wählen – Zahlen – Nehmen oder
    wahlweise die Kombination von beiden).
    Gruß Willi

  2. Hallo Willi,
    beides soll möglich sein.
    So lange das Guthaben ausreicht, soll auch Kaffee genommen werden können.
    So könnte man beispielsweise 1 Euro einwerfen und dann 2 Kaffee und 1 Espresso entnehmen.

    Viele Grüße
    Wolfgang

  3. Ich weiß zwar nicht ob du dich noch hier rum treibst,
    erst mal großes Kompliment für diese Tutorials,
    Sehr verständlich :)
    Hier wäre mal meine Lösung:
    Mit:
    Geldzähler,
    und Geld rückgabe:

    i=0;
    while (1) {
    switch (P1)
    {case 1:
    printf(“Guthaben: %d cent\n”,++i);
    getchar();
    break;
    case 2:
    i=i+2;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 4:
    i=i+5;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 8:
    i=i+10;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 16:
    i=i+20;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 32:
    i=i+50;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 64:
    i=i+100;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 128:
    i=i+200;
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 0:
    printf(“Guthaben: %d cent\n”,i);
    getchar();
    break;
    case 3:
    printf(“Ihr Restguthaben wird Ihnen Ausgegeben: %d cent\n”,i);
    i=i-i;
    getchar();
    break;
    default:
    printf(“Ihr Geld wird Ausgeworfen”);
    break;

    }
    if(i>=320)
    {
    printf(“Ihr Kafee wird ausgegeben\n”);
    i=i-320;
    getchar();
    }
    else
    {printf(“\n”);
    }
    }
    }

    Und eine Frage ist es nciht möglich bei der Case function Berreiche einzugrenzen zB.
    case ((i30) oder (<=10)
    {
    printf("der Berreich ist zwischen 5 und 30"\n);
    break;
    }

    Hoffe auf Antwort :)
    MfG

Kommentiere hier den Artikel:

Abonnieren ohne einen Kommentar abzugeben