halo
This commit is contained in:
parent
7b6de3d556
commit
6da144e049
@ -2,7 +2,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "automat.h"
|
#include "automat.h"
|
||||||
|
|
||||||
typedef enum {A=0,B,C,D,E,F,H,I, NR_OF_STATES} state_t;
|
typedef enum {A=0, B, C, D, E, F, NR_OF_STATES} state_t;
|
||||||
|
|
||||||
static state_t s_curstate = A;
|
static state_t s_curstate = A;
|
||||||
static int s_guthaben = 0;
|
static int s_guthaben = 0;
|
||||||
@ -27,31 +27,36 @@ void automat_transition(BOOL becher, BOOL muenze, BOOL muenz_wert)
|
|||||||
s_muenz_rueck = false;
|
s_muenz_rueck = false;
|
||||||
s_display = false;
|
s_display = false;
|
||||||
|
|
||||||
|
int wert = muenz_wert ? 2 : 1;
|
||||||
|
|
||||||
switch (s_curstate) {
|
switch (s_curstate) {
|
||||||
case A: case B: case C: case D:
|
case A: case B: case C: case D: case E:
|
||||||
// Münzeinwurf
|
// Münzeinwurf
|
||||||
if (muenze) {
|
if (muenze) {
|
||||||
int wert = muenz_wert ? 2 : 1;
|
|
||||||
if (s_guthaben + wert > 4) {
|
if (s_guthaben + wert > 4) {
|
||||||
s_muenz_rueck = true;
|
s_muenz_rueck = true;
|
||||||
|
s_display = true;
|
||||||
s_display_string = "Zu viel! Münze zurück";
|
s_display_string = "Zu viel! Münze zurück";
|
||||||
|
break;
|
||||||
} else {
|
} else {
|
||||||
s_guthaben += wert;
|
s_guthaben += wert;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// *** Hier ist die Änderung ***
|
|
||||||
|
// Guthaben prüfen
|
||||||
if (s_guthaben < 4) {
|
if (s_guthaben < 4) {
|
||||||
if (s_guthaben == 0) s_curstate = A, s_display_string = "Warten";
|
if (s_guthaben == 0) { s_curstate = A; s_display_string = "Warten"; }
|
||||||
else if (s_guthaben == 1) s_curstate = B, s_display_string = "1 Euro";
|
else if (s_guthaben == 1) { s_curstate = B; s_display_string = "1 Euro"; }
|
||||||
else if (s_guthaben == 2) s_curstate = C, s_display_string = "2 Euro";
|
else if (s_guthaben == 2) { s_curstate = C; s_display_string = "2 Euro"; }
|
||||||
else if (s_guthaben == 3) s_curstate = D, s_display_string = "3 Euro";
|
else if (s_guthaben == 3) { s_curstate = D; s_display_string = "3 Euro"; }
|
||||||
|
// Kein Display aktivieren!
|
||||||
} else if (s_guthaben == 4) {
|
} else if (s_guthaben == 4) {
|
||||||
if (becher) {
|
if (becher) {
|
||||||
s_curstate = F;
|
s_curstate = F;
|
||||||
s_kaffee_los = true;
|
s_kaffee_los = true;
|
||||||
s_display = true;
|
s_display = true;
|
||||||
s_display_string = "Kaffee wird ausgegeben";
|
s_display_string = "Kaffee wird ausgegeben";
|
||||||
s_guthaben = 0; // Guthaben wird nach Ausgabe zurückgesetzt!
|
s_guthaben = 0;
|
||||||
} else {
|
} else {
|
||||||
s_curstate = E;
|
s_curstate = E;
|
||||||
s_display = true;
|
s_display = true;
|
||||||
@ -60,18 +65,7 @@ void automat_transition(BOOL becher, BOOL muenze, BOOL muenz_wert)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E: // 4 Euro, warte auf Becher
|
case F:
|
||||||
s_display = true;
|
|
||||||
s_display_string = "Bitte Becher unterstellen!";
|
|
||||||
if (becher) {
|
|
||||||
s_curstate = F;
|
|
||||||
s_kaffee_los = true;
|
|
||||||
s_display_string = "Kaffee wird ausgegeben";
|
|
||||||
s_guthaben = 0; // Guthaben wird nach Ausgabe zurückgesetzt!
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F: // Kaffee läuft, warte auf Becherentnahme
|
|
||||||
s_display = true;
|
s_display = true;
|
||||||
s_display_string = "Becher entnehmen";
|
s_display_string = "Becher entnehmen";
|
||||||
if (!becher) {
|
if (!becher) {
|
||||||
@ -100,4 +94,5 @@ fsm_action_t automat_output(void)
|
|||||||
.display_string = s_display_string
|
.display_string = s_display_string
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
//gcc automat.c view.c main.c io.c checker.c -o console_automat
|
//gcc automat.c view.c main.c io.c checker.c -o console_automat
|
||||||
|
Loading…
x
Reference in New Issue
Block a user