UEBUNG - Statemachine - SERIAL DEBUG Einzelne Schritte - SERIAL Ausgabe
Dependencies: mbed
main.cpp
00001 00002 // Mit H-Term connecten 00003 // Debug über Konsole 00004 00005 #include "mbed.h" 00006 00007 class StateMachine 00008 { 00009 private: 00010 InterruptIn _sw1, _sw2, _sw3, _sw4; 00011 DigitalOut _led1, _led2, _led3, _led4; 00012 enum _State {ST_IDLE=0, ST_Blinken, ST_TimeOut}; 00013 Timer _getTime; 00014 bool volatile _sw1Pressed; // rechnet zu schnell als das cache korrekt ausgelesen wird 00015 bool volatile _sw2Pressed; 00016 public: 00017 StateMachine(PinName sw1, PinName sw2, PinName sw3, PinName sw4, PinName led1, PinName led2, PinName led3, PinName led4): 00018 _sw1(sw1), _sw2(sw2), _sw3(sw3), _sw4(sw4), _led1(led1), _led2(led2), _led3(led3), _led4(led4) 00019 { 00020 _led1=0; _led2=0; _led3=0; _led4=0; 00021 _sw1.rise(callback(this, &StateMachine::sw1Rise)); 00022 _sw2.rise(callback(this, &StateMachine::sw2Rise)); 00023 } 00024 public: 00025 _State state; 00026 public: 00027 void init(void); 00028 void sw1Rise(void); void sw2Rise(void); 00029 void getTime(void); 00030 void statemachine(void); 00031 void idle(void); void blinken(void); void timeOut(void); 00032 bool sw1CheckFlag(void); bool sw2CheckFlag(void); 00033 }; 00034 00035 void StateMachine::init(void) 00036 { 00037 printf("state - init \n"); 00038 _sw1Pressed = false; 00039 _sw2Pressed = false; 00040 state = ST_IDLE; 00041 } 00042 00043 bool StateMachine::sw2CheckFlag(void) 00044 { 00045 if(_sw2Pressed == true) // Erweitern das es nicht im IDLE status gedrück werden kann 00046 { 00047 printf("state - sw2CheckFlag \n"); 00048 _sw2Pressed = false; 00049 return true; 00050 } 00051 return false; 00052 } 00053 00054 void StateMachine::sw2Rise(void) 00055 { 00056 printf("state - sw2Rise \n"); 00057 _sw2Pressed = true; 00058 wait(0.2); 00059 } 00060 00061 void StateMachine::timeOut(void) 00062 { 00063 printf("state - timeOut \n \n"); 00064 printf("TimeOut in Sekunden: "); 00065 int counter = 0; 00066 while(true) // mit counter hängt Terminal immer 10 sekunden, eventuell mit TIcker machen 00067 { 00068 printf("%i ", counter++); 00069 wait(1); 00070 00071 if(sw2CheckFlag()) 00072 { 00073 state = ST_Blinken; 00074 return; 00075 } 00076 00077 } 00078 } 00079 00080 bool StateMachine::sw1CheckFlag(void) 00081 { 00082 if(_sw1Pressed == true) 00083 { 00084 printf("state - sw1CheckFlag \n"); 00085 _sw1Pressed = false; 00086 getTime(); 00087 return true; 00088 } 00089 return false; 00090 } 00091 00092 void StateMachine::sw1Rise(void) 00093 { 00094 printf("state - sw1Rise \n"); 00095 _sw1Pressed = true; 00096 wait(0.2); 00097 } 00098 00099 void StateMachine::getTime(void) 00100 { 00101 printf("state - getTime \n"); 00102 if(_getTime.read() > 0) 00103 { 00104 printf("----------------------------\n"); 00105 printf("Time passed: %.2f Sekunden \n", _getTime.read()); 00106 printf("----------------------------\n"); 00107 printf("Timer - reset \n"); 00108 _getTime.reset(); 00109 } 00110 else 00111 { 00112 printf("Timer - start \n"); 00113 _getTime.start(); 00114 } 00115 } 00116 00117 void StateMachine::statemachine(void) 00118 { 00119 printf("state - menu \n"); 00120 while(true) 00121 { 00122 switch(state) 00123 { 00124 case ST_IDLE: idle(); break; 00125 case ST_Blinken: blinken(); break; 00126 case ST_TimeOut: timeOut(); break; 00127 default: printf("ERROR \n"); break; 00128 } 00129 00130 } 00131 00132 } 00133 00134 void StateMachine::idle(void) 00135 { 00136 printf("state - idle \n \n"); 00137 while(true) 00138 { 00139 if(sw1CheckFlag()) 00140 { 00141 state = ST_Blinken; 00142 return; 00143 } 00144 } 00145 00146 } 00147 00148 void StateMachine::blinken(void) 00149 { 00150 printf("state - blinken \n \n"); 00151 _led1 = true; 00152 while(true) 00153 { 00154 _led4 = !_led4; 00155 wait(0.250); 00156 00157 if(sw1CheckFlag()) 00158 { 00159 state = ST_IDLE; 00160 _led1 = false; 00161 _led4 = false; 00162 return; 00163 } 00164 else if(sw2CheckFlag()) 00165 { 00166 state = ST_TimeOut; 00167 return; 00168 } 00169 } 00170 } 00171 00172 00173 00174 StateMachine statemachine(p14, p15, p12, p16, LED1, LED2, LED3, LED4); 00175 00176 int main() 00177 { 00178 printf("-------------------------------- \n"); 00179 printf("| SERIAL - DEBUG | PWR - 2019 | \n"); 00180 printf("-------------------------------- \n"); 00181 printf("main - 1 \n"); 00182 statemachine.init(); 00183 printf("main - 2 \n"); 00184 statemachine.statemachine(); 00185 printf("main - 3 \n"); 00186 00187 }
Generated on Sun Jul 17 2022 21:10:14 by 1.7.2