![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
UEBUNG - Statemachine - SERIAL DEBUG Einzelne Schritte - SERIAL Ausgabe
Dependencies: mbed
main.cpp
- Committer:
- Powers
- Date:
- 2019-01-31
- Revision:
- 0:043b228cfeb8
File content as of revision 0:043b228cfeb8:
// Mit H-Term connecten // Debug über Konsole #include "mbed.h" class StateMachine { private: InterruptIn _sw1, _sw2, _sw3, _sw4; DigitalOut _led1, _led2, _led3, _led4; enum _State {ST_IDLE=0, ST_Blinken, ST_TimeOut}; Timer _getTime; bool volatile _sw1Pressed; // rechnet zu schnell als das cache korrekt ausgelesen wird bool volatile _sw2Pressed; public: StateMachine(PinName sw1, PinName sw2, PinName sw3, PinName sw4, PinName led1, PinName led2, PinName led3, PinName led4): _sw1(sw1), _sw2(sw2), _sw3(sw3), _sw4(sw4), _led1(led1), _led2(led2), _led3(led3), _led4(led4) { _led1=0; _led2=0; _led3=0; _led4=0; _sw1.rise(callback(this, &StateMachine::sw1Rise)); _sw2.rise(callback(this, &StateMachine::sw2Rise)); } public: _State state; public: void init(void); void sw1Rise(void); void sw2Rise(void); void getTime(void); void statemachine(void); void idle(void); void blinken(void); void timeOut(void); bool sw1CheckFlag(void); bool sw2CheckFlag(void); }; void StateMachine::init(void) { printf("state - init \n"); _sw1Pressed = false; _sw2Pressed = false; state = ST_IDLE; } bool StateMachine::sw2CheckFlag(void) { if(_sw2Pressed == true) // Erweitern das es nicht im IDLE status gedrück werden kann { printf("state - sw2CheckFlag \n"); _sw2Pressed = false; return true; } return false; } void StateMachine::sw2Rise(void) { printf("state - sw2Rise \n"); _sw2Pressed = true; wait(0.2); } void StateMachine::timeOut(void) { printf("state - timeOut \n \n"); printf("TimeOut in Sekunden: "); int counter = 0; while(true) // mit counter hängt Terminal immer 10 sekunden, eventuell mit TIcker machen { printf("%i ", counter++); wait(1); if(sw2CheckFlag()) { state = ST_Blinken; return; } } } bool StateMachine::sw1CheckFlag(void) { if(_sw1Pressed == true) { printf("state - sw1CheckFlag \n"); _sw1Pressed = false; getTime(); return true; } return false; } void StateMachine::sw1Rise(void) { printf("state - sw1Rise \n"); _sw1Pressed = true; wait(0.2); } void StateMachine::getTime(void) { printf("state - getTime \n"); if(_getTime.read() > 0) { printf("----------------------------\n"); printf("Time passed: %.2f Sekunden \n", _getTime.read()); printf("----------------------------\n"); printf("Timer - reset \n"); _getTime.reset(); } else { printf("Timer - start \n"); _getTime.start(); } } void StateMachine::statemachine(void) { printf("state - menu \n"); while(true) { switch(state) { case ST_IDLE: idle(); break; case ST_Blinken: blinken(); break; case ST_TimeOut: timeOut(); break; default: printf("ERROR \n"); break; } } } void StateMachine::idle(void) { printf("state - idle \n \n"); while(true) { if(sw1CheckFlag()) { state = ST_Blinken; return; } } } void StateMachine::blinken(void) { printf("state - blinken \n \n"); _led1 = true; while(true) { _led4 = !_led4; wait(0.250); if(sw1CheckFlag()) { state = ST_IDLE; _led1 = false; _led4 = false; return; } else if(sw2CheckFlag()) { state = ST_TimeOut; return; } } } StateMachine statemachine(p14, p15, p12, p16, LED1, LED2, LED3, LED4); int main() { printf("-------------------------------- \n"); printf("| SERIAL - DEBUG | PWR - 2019 | \n"); printf("-------------------------------- \n"); printf("main - 1 \n"); statemachine.init(); printf("main - 2 \n"); statemachine.statemachine(); printf("main - 3 \n"); }