Lösung für eine Funktion zur Münzeingabe
Kategorien: MikrocontrollerWie immer gibt es verschiedene Möglichkeiten die Funktion zu realisieren.
Mein Vorschlag ist daher nur eine mögliche Lösung. Es gibt sicher elegantere Lösung. Vor allem der Umgang mit der Variablen Betrag lässt sich sicher noch optimieren
. Nähere Information gibt es dazu Video.
Die Anforderungen an die Funktion Eingabe()
In der Funktion Eingabe sollen zwei Dinge umgesetzt werden.
- Die Erhöhung des Gesamtbetrages um den Wert der eingeworfenen Münze und die Ausgabe des Gesamtbetrages.
- Das Zurücksetzen des entsprechenden Portbits, damit die Münze beim nächsten Durchlauf nicht noch einmal gezählt wird.
Um die Funktion Eingabe() zu realiseren, musst Du verschiedene Dinge, die Du in den vergangenen Folgen gelernt hast umsetzen.
Zur Verwendung von Funktionen kannst Du Dir evtl, noch einmal die Videos ab Artikel 22 Funktionen in C angucken.
Auch die Videos zur Variablenzuweisung, zur if-Abfrage und zur Bitweisen Manipulation können vielleicht helfen.
Während der erste Teil, Die Erhöhung des Gesamtbetrages um den Wert der eingeworfenen Münze und die Ausgabe des Gesamtbetrages, noch verhältnismäßig einfach ist, geht es bei dem 2. Teil der Aufgabe schon ziemlich zur Sache.
Wie häufig bei Funktionen, bei denen die Ausführung abhängig von Parametern ist, ist es auch in diesem Beispiel so, dass Du bei der Programmierung der Funktion noch nicht weißt, welche Parameter übergeben werden. Du musst also die Funktion so flexibel gestalten, dass aus den übergebenen Parametern die durchzuführenden Befehle errechnet werden können.
Eine mögliche Lösung findest Du im Video.
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 .]
Hat Dir der Artikel geholfen? - Dann hilf dem Artikel ;-)
|
Ähnliche Artikel
Folgende Artikel aus der gleichen Kategorie könnten Dich ebenfalls interessieren:
Keinen passenden
|
Arrays In den vergangenen Folgen ging es ja schon um die Optimierung der Programmierung für unsren Kaffeeau...
Lösung der Übungsaufgabe zu Funktionen In den vergangenen Artikeln bin ich auf die Behandlung von Funktionen und das Thema Parameterübergab...
Bitweises Auslesen eines PORTs Im heutigen Video zeige ich eine mögliche Lösung, wie man mit Hilfe eins bitweisen UND bzw. eines bi...
Bitweise Manipulation Der Kaffeeautomat funktioniert ja schon im Prinzip. Aber zumindest beim Geldeinwurf gibt es noch ein...




Mein Name ist Wolfgang Bengfort. Ich bin Lehrer für Elektrotechnik und Technische Informatik und habe im September 2009 diese Seite gestartet. 

Hallo Herr Wolfgang Bengfort,
ich finde die fehler in der Implementierung nicht.
-Ich muss 3 mal auf Run klicken dann wird ausgeführt.
-ich bekomme den gesamten Betrag nicht zurück.
Könnten Sie mir bitte vielleicht ein paar Tips geben.
Danke im voraus.
#include
#include
int betrag;
void eingabe(char,int);
void main (void) {
char h,k,c,e;
P1=0;
printf(“Schmeißen Sie das Geld rein \n”);
while (1) {
if (P1&0×01) eingabe (0×01,1);
if (P1&0×02) eingabe (0×02,2);
if (P1&0×04) eingabe (0×04,5);
if (P1&0×08) eingabe (0×08,10);
if (P1&0×10) eingabe (0×10,20);
if (P1&0×20) eingabe (0×20,50);
if (P1&0×40) eingabe (0×40,100);
if (P1&0×80) eingabe (0×80,200);
k=’k';
e=’e';
c=’c';
h=getchar();
switch(h){
case ‘k’:
printf(“Sie haben Kaffee gewählt. \n”);
printf(“Kaffee kostet 30 Cent. \n”);
if(betrag>=30){
printf(“Sie haben noch %d Cent übrig.\n”, betrag=betrag-30);
}
else { printf(“Sorry, Sie haben nicht genug Geld, schmeissen Sie mindestens %d Cent rein.\n “, 30-betrag);}
break;
case ‘e’:
printf(“Sie haben Espresso gewählt. \n”);
printf(“Espresso kostet 40 Cent. \n”);
if(betrag>=40){
printf(“Sie haben noch %d Cent übrig.\n”, betrag=betrag-40);
}
else { printf(“Sorry, Sie haben nicht genug Geld, schmeissen Sie mindestens %d Cent rein.\n “, 40-betrag);}
break;
case ‘c’:
printf(“Sie haben Cappuccino gewählt. \n”);
printf(“Cappuccino kostet 50 Cent. \n”);
if(betrag>=50){
printf(“Sie haben noch %d Cent übrig.\n”, betrag=betrag-50);
}
else { printf(“Sorry, Sie haben nicht genug Geld, schmeissen Sie mindestens %d Cent rein.\n “, 50-betrag);}
break;
default:
printf(“Drücken Sie e für Esspresso,k für Kaffee oder c für Cappuccino \n”);
} //end switch */
} //end while
} // end main
void eingabe (char platz, int sum){
printf(“Der Guthaben beträgt %d Cent\n”, betrag+sum);
P1=P1&(0XFF-platz);
}
Ja, da gibt es mehrere kleine Probleme.
Wenn das Programm gestartet wird, läuft der Mikrocntroller zunächst einmal zum ersten getchar().
Die geplante Auswertung durch die Funktion eingabe() ist dann schon gelaufen.
Es wird also als erstes die Getränkeauswahl bearbeitet, obwohl der Betrag noch 0 beträgt.
In der Funktion eingabe() fällt mir noch auf, dass die Variable betrag nicht aktualisiert wird.
Es wird zwar der neue Betrag angezeigt, der Wert aber nicht in der Variablen betrag gespeichert.
Danke schön