This commit is contained in:
Bora Zuenbuelkoek 2025-06-11 10:02:01 +02:00
parent 7b6de3d556
commit 6da144e049

View File

@ -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