Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- enum states {
- start_off, //0
- on, //1
- espresso_ready, //2
- steamer_ready, //3
- make_espresso, //4
- make_steam, //5
- };
- enum signals {
- switch_off, //0
- switch_on, //1
- heat_up, //2
- espresso_on, //3
- espresso_off, //4
- steam_on, //5
- steam_off, //6
- steam_knob_forward, //7
- steam_knob_backward //8
- };
- enum states Coffe_FSM[6][9] = { //conversion table
- [start_off][switch_on]=on,
- [on][switch_off]=start_off,
- [on][heat_up]=espresso_ready,
- [espresso_ready][switch_off]=start_off,
- [espresso_ready][steam_on]=steamer_ready,
- [espresso_ready][espresso_on]=make_espresso,
- [steamer_ready][switch_off]=start_off,
- [steamer_ready][steam_off]=espresso_ready,
- [steamer_ready][steam_knob_forward]=make_steam,
- [make_steam][steam_knob_backward]=steamer_ready,
- [make_espresso][espresso_off]=espresso_ready
- };
- enum signals getSignal()
- {
- enum signals signal;
- printf("Give me signal(if u choose undetermined signal for this state u will return on start state)\n");
- scanf("%d", &signal);
- return signal;
- }
- void doCoffe_FSM()
- {
- enum states current_state = start_off;
- enum states new_state;
- printf("List of states\n");
- printf("0 - start_off\n");
- printf("1 - on\n");
- printf("2 - espresso_ready\n");
- printf("3 - steamer_ready\n");
- printf("4 - make_espresso(coffee ready)\n");
- printf("5 - make_steam(coffee ready)\n\n");
- printf("List of signals\n");
- printf("0 - switch_off\n");
- printf("1 - switch_on\n");
- printf("2 - heat_up\n");
- printf("3 - espresso_on\n");
- printf("4 - espresso_off\n");
- printf("5 - steam_on\n");
- printf("6 - steam_off\n");
- printf("7 - steam_knob_forward\n");
- printf("8 - steam_knob_backward\n\n");
- while (1)
- {
- enum signals current_signal = getSignal();
- new_state = Coffe_FSM[current_state][current_signal];
- printf("Current state = %d, signal = %d, new state = %d\n", current_state, current_signal, new_state);
- current_state = new_state;
- if(new_state==make_espresso || new_state==make_steam)
- {
- printf("\nCoffee ready! Enjoy");
- break;
- }
- }
- }
- int main() {
- doCoffe_FSM();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement