Advertisement
olegovich22

task 10

Jun 22nd, 2018
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. enum states {
  4.     start_off,           //0
  5.     on,                  //1
  6.     espresso_ready,      //2
  7.     steamer_ready,       //3
  8.     make_espresso,       //4
  9.     make_steam,          //5
  10. };
  11.  
  12. enum signals {
  13.     switch_off,           //0
  14.     switch_on,            //1
  15.     heat_up,              //2
  16.     espresso_on,          //3
  17.     espresso_off,         //4
  18.     steam_on,             //5
  19.     steam_off,            //6
  20.     steam_knob_forward,   //7
  21.     steam_knob_backward   //8
  22. };
  23.  
  24. enum states Coffe_FSM[6][9] = {     //conversion table
  25.         [start_off][switch_on]=on,
  26.  
  27.         [on][switch_off]=start_off,
  28.         [on][heat_up]=espresso_ready,
  29.  
  30.         [espresso_ready][switch_off]=start_off,
  31.         [espresso_ready][steam_on]=steamer_ready,
  32.         [espresso_ready][espresso_on]=make_espresso,
  33.  
  34.         [steamer_ready][switch_off]=start_off,
  35.         [steamer_ready][steam_off]=espresso_ready,
  36.         [steamer_ready][steam_knob_forward]=make_steam,
  37.  
  38.         [make_steam][steam_knob_backward]=steamer_ready,
  39.  
  40.         [make_espresso][espresso_off]=espresso_ready
  41.  
  42. };
  43.  
  44. enum signals getSignal()
  45. {
  46.     enum signals signal;
  47.     printf("Give me signal(if u choose undetermined signal for this state u will return on start state)\n");
  48.     scanf("%d", &signal);
  49.     return signal;
  50.  
  51. }
  52.  
  53. void doCoffe_FSM()
  54. {
  55.     enum states current_state = start_off;
  56.     enum states new_state;
  57.  
  58.     printf("List of states\n");
  59.     printf("0 - start_off\n");
  60.     printf("1 - on\n");
  61.     printf("2 - espresso_ready\n");
  62.     printf("3 - steamer_ready\n");
  63.     printf("4 - make_espresso(coffee ready)\n");
  64.     printf("5 - make_steam(coffee ready)\n\n");
  65.    
  66.     printf("List of signals\n");
  67.     printf("0 - switch_off\n");
  68.     printf("1 - switch_on\n");
  69.     printf("2 - heat_up\n");
  70.     printf("3 - espresso_on\n");
  71.     printf("4 - espresso_off\n");
  72.     printf("5 - steam_on\n");
  73.     printf("6 - steam_off\n");
  74.     printf("7 - steam_knob_forward\n");
  75.     printf("8 - steam_knob_backward\n\n");
  76.  
  77.     while (1)
  78.     {
  79.         enum signals current_signal = getSignal();
  80.  
  81.         new_state = Coffe_FSM[current_state][current_signal];
  82.         printf("Current state = %d, signal = %d, new state = %d\n", current_state, current_signal, new_state);
  83.         current_state = new_state;
  84.  
  85.         if(new_state==make_espresso || new_state==make_steam)
  86.         {
  87.             printf("\nCoffee ready! Enjoy");
  88.             break;
  89.         }
  90.     }
  91. }
  92.  
  93. int main() {
  94.  
  95.     doCoffe_FSM();
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement