UEBUNG - Statemachine - SERIAL DEBUG Einzelne Schritte - SERIAL Ausgabe
Dependencies: mbed
main.cpp@0:043b228cfeb8, 2019-01-31 (annotated)
- Committer:
- Powers
- Date:
- Thu Jan 31 23:21:49 2019 +0000
- Revision:
- 0:043b228cfeb8
UEBUNG - Statemachine - SERIAL DEBUG; Einzelne Schritte - SERIAL Ausgabe
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Powers | 0:043b228cfeb8 | 1 | |
Powers | 0:043b228cfeb8 | 2 | // Mit H-Term connecten |
Powers | 0:043b228cfeb8 | 3 | // Debug über Konsole |
Powers | 0:043b228cfeb8 | 4 | |
Powers | 0:043b228cfeb8 | 5 | #include "mbed.h" |
Powers | 0:043b228cfeb8 | 6 | |
Powers | 0:043b228cfeb8 | 7 | class StateMachine |
Powers | 0:043b228cfeb8 | 8 | { |
Powers | 0:043b228cfeb8 | 9 | private: |
Powers | 0:043b228cfeb8 | 10 | InterruptIn _sw1, _sw2, _sw3, _sw4; |
Powers | 0:043b228cfeb8 | 11 | DigitalOut _led1, _led2, _led3, _led4; |
Powers | 0:043b228cfeb8 | 12 | enum _State {ST_IDLE=0, ST_Blinken, ST_TimeOut}; |
Powers | 0:043b228cfeb8 | 13 | Timer _getTime; |
Powers | 0:043b228cfeb8 | 14 | bool volatile _sw1Pressed; // rechnet zu schnell als das cache korrekt ausgelesen wird |
Powers | 0:043b228cfeb8 | 15 | bool volatile _sw2Pressed; |
Powers | 0:043b228cfeb8 | 16 | public: |
Powers | 0:043b228cfeb8 | 17 | StateMachine(PinName sw1, PinName sw2, PinName sw3, PinName sw4, PinName led1, PinName led2, PinName led3, PinName led4): |
Powers | 0:043b228cfeb8 | 18 | _sw1(sw1), _sw2(sw2), _sw3(sw3), _sw4(sw4), _led1(led1), _led2(led2), _led3(led3), _led4(led4) |
Powers | 0:043b228cfeb8 | 19 | { |
Powers | 0:043b228cfeb8 | 20 | _led1=0; _led2=0; _led3=0; _led4=0; |
Powers | 0:043b228cfeb8 | 21 | _sw1.rise(callback(this, &StateMachine::sw1Rise)); |
Powers | 0:043b228cfeb8 | 22 | _sw2.rise(callback(this, &StateMachine::sw2Rise)); |
Powers | 0:043b228cfeb8 | 23 | } |
Powers | 0:043b228cfeb8 | 24 | public: |
Powers | 0:043b228cfeb8 | 25 | _State state; |
Powers | 0:043b228cfeb8 | 26 | public: |
Powers | 0:043b228cfeb8 | 27 | void init(void); |
Powers | 0:043b228cfeb8 | 28 | void sw1Rise(void); void sw2Rise(void); |
Powers | 0:043b228cfeb8 | 29 | void getTime(void); |
Powers | 0:043b228cfeb8 | 30 | void statemachine(void); |
Powers | 0:043b228cfeb8 | 31 | void idle(void); void blinken(void); void timeOut(void); |
Powers | 0:043b228cfeb8 | 32 | bool sw1CheckFlag(void); bool sw2CheckFlag(void); |
Powers | 0:043b228cfeb8 | 33 | }; |
Powers | 0:043b228cfeb8 | 34 | |
Powers | 0:043b228cfeb8 | 35 | void StateMachine::init(void) |
Powers | 0:043b228cfeb8 | 36 | { |
Powers | 0:043b228cfeb8 | 37 | printf("state - init \n"); |
Powers | 0:043b228cfeb8 | 38 | _sw1Pressed = false; |
Powers | 0:043b228cfeb8 | 39 | _sw2Pressed = false; |
Powers | 0:043b228cfeb8 | 40 | state = ST_IDLE; |
Powers | 0:043b228cfeb8 | 41 | } |
Powers | 0:043b228cfeb8 | 42 | |
Powers | 0:043b228cfeb8 | 43 | bool StateMachine::sw2CheckFlag(void) |
Powers | 0:043b228cfeb8 | 44 | { |
Powers | 0:043b228cfeb8 | 45 | if(_sw2Pressed == true) // Erweitern das es nicht im IDLE status gedrück werden kann |
Powers | 0:043b228cfeb8 | 46 | { |
Powers | 0:043b228cfeb8 | 47 | printf("state - sw2CheckFlag \n"); |
Powers | 0:043b228cfeb8 | 48 | _sw2Pressed = false; |
Powers | 0:043b228cfeb8 | 49 | return true; |
Powers | 0:043b228cfeb8 | 50 | } |
Powers | 0:043b228cfeb8 | 51 | return false; |
Powers | 0:043b228cfeb8 | 52 | } |
Powers | 0:043b228cfeb8 | 53 | |
Powers | 0:043b228cfeb8 | 54 | void StateMachine::sw2Rise(void) |
Powers | 0:043b228cfeb8 | 55 | { |
Powers | 0:043b228cfeb8 | 56 | printf("state - sw2Rise \n"); |
Powers | 0:043b228cfeb8 | 57 | _sw2Pressed = true; |
Powers | 0:043b228cfeb8 | 58 | wait(0.2); |
Powers | 0:043b228cfeb8 | 59 | } |
Powers | 0:043b228cfeb8 | 60 | |
Powers | 0:043b228cfeb8 | 61 | void StateMachine::timeOut(void) |
Powers | 0:043b228cfeb8 | 62 | { |
Powers | 0:043b228cfeb8 | 63 | printf("state - timeOut \n \n"); |
Powers | 0:043b228cfeb8 | 64 | printf("TimeOut in Sekunden: "); |
Powers | 0:043b228cfeb8 | 65 | int counter = 0; |
Powers | 0:043b228cfeb8 | 66 | while(true) // mit counter hängt Terminal immer 10 sekunden, eventuell mit TIcker machen |
Powers | 0:043b228cfeb8 | 67 | { |
Powers | 0:043b228cfeb8 | 68 | printf("%i ", counter++); |
Powers | 0:043b228cfeb8 | 69 | wait(1); |
Powers | 0:043b228cfeb8 | 70 | |
Powers | 0:043b228cfeb8 | 71 | if(sw2CheckFlag()) |
Powers | 0:043b228cfeb8 | 72 | { |
Powers | 0:043b228cfeb8 | 73 | state = ST_Blinken; |
Powers | 0:043b228cfeb8 | 74 | return; |
Powers | 0:043b228cfeb8 | 75 | } |
Powers | 0:043b228cfeb8 | 76 | |
Powers | 0:043b228cfeb8 | 77 | } |
Powers | 0:043b228cfeb8 | 78 | } |
Powers | 0:043b228cfeb8 | 79 | |
Powers | 0:043b228cfeb8 | 80 | bool StateMachine::sw1CheckFlag(void) |
Powers | 0:043b228cfeb8 | 81 | { |
Powers | 0:043b228cfeb8 | 82 | if(_sw1Pressed == true) |
Powers | 0:043b228cfeb8 | 83 | { |
Powers | 0:043b228cfeb8 | 84 | printf("state - sw1CheckFlag \n"); |
Powers | 0:043b228cfeb8 | 85 | _sw1Pressed = false; |
Powers | 0:043b228cfeb8 | 86 | getTime(); |
Powers | 0:043b228cfeb8 | 87 | return true; |
Powers | 0:043b228cfeb8 | 88 | } |
Powers | 0:043b228cfeb8 | 89 | return false; |
Powers | 0:043b228cfeb8 | 90 | } |
Powers | 0:043b228cfeb8 | 91 | |
Powers | 0:043b228cfeb8 | 92 | void StateMachine::sw1Rise(void) |
Powers | 0:043b228cfeb8 | 93 | { |
Powers | 0:043b228cfeb8 | 94 | printf("state - sw1Rise \n"); |
Powers | 0:043b228cfeb8 | 95 | _sw1Pressed = true; |
Powers | 0:043b228cfeb8 | 96 | wait(0.2); |
Powers | 0:043b228cfeb8 | 97 | } |
Powers | 0:043b228cfeb8 | 98 | |
Powers | 0:043b228cfeb8 | 99 | void StateMachine::getTime(void) |
Powers | 0:043b228cfeb8 | 100 | { |
Powers | 0:043b228cfeb8 | 101 | printf("state - getTime \n"); |
Powers | 0:043b228cfeb8 | 102 | if(_getTime.read() > 0) |
Powers | 0:043b228cfeb8 | 103 | { |
Powers | 0:043b228cfeb8 | 104 | printf("----------------------------\n"); |
Powers | 0:043b228cfeb8 | 105 | printf("Time passed: %.2f Sekunden \n", _getTime.read()); |
Powers | 0:043b228cfeb8 | 106 | printf("----------------------------\n"); |
Powers | 0:043b228cfeb8 | 107 | printf("Timer - reset \n"); |
Powers | 0:043b228cfeb8 | 108 | _getTime.reset(); |
Powers | 0:043b228cfeb8 | 109 | } |
Powers | 0:043b228cfeb8 | 110 | else |
Powers | 0:043b228cfeb8 | 111 | { |
Powers | 0:043b228cfeb8 | 112 | printf("Timer - start \n"); |
Powers | 0:043b228cfeb8 | 113 | _getTime.start(); |
Powers | 0:043b228cfeb8 | 114 | } |
Powers | 0:043b228cfeb8 | 115 | } |
Powers | 0:043b228cfeb8 | 116 | |
Powers | 0:043b228cfeb8 | 117 | void StateMachine::statemachine(void) |
Powers | 0:043b228cfeb8 | 118 | { |
Powers | 0:043b228cfeb8 | 119 | printf("state - menu \n"); |
Powers | 0:043b228cfeb8 | 120 | while(true) |
Powers | 0:043b228cfeb8 | 121 | { |
Powers | 0:043b228cfeb8 | 122 | switch(state) |
Powers | 0:043b228cfeb8 | 123 | { |
Powers | 0:043b228cfeb8 | 124 | case ST_IDLE: idle(); break; |
Powers | 0:043b228cfeb8 | 125 | case ST_Blinken: blinken(); break; |
Powers | 0:043b228cfeb8 | 126 | case ST_TimeOut: timeOut(); break; |
Powers | 0:043b228cfeb8 | 127 | default: printf("ERROR \n"); break; |
Powers | 0:043b228cfeb8 | 128 | } |
Powers | 0:043b228cfeb8 | 129 | |
Powers | 0:043b228cfeb8 | 130 | } |
Powers | 0:043b228cfeb8 | 131 | |
Powers | 0:043b228cfeb8 | 132 | } |
Powers | 0:043b228cfeb8 | 133 | |
Powers | 0:043b228cfeb8 | 134 | void StateMachine::idle(void) |
Powers | 0:043b228cfeb8 | 135 | { |
Powers | 0:043b228cfeb8 | 136 | printf("state - idle \n \n"); |
Powers | 0:043b228cfeb8 | 137 | while(true) |
Powers | 0:043b228cfeb8 | 138 | { |
Powers | 0:043b228cfeb8 | 139 | if(sw1CheckFlag()) |
Powers | 0:043b228cfeb8 | 140 | { |
Powers | 0:043b228cfeb8 | 141 | state = ST_Blinken; |
Powers | 0:043b228cfeb8 | 142 | return; |
Powers | 0:043b228cfeb8 | 143 | } |
Powers | 0:043b228cfeb8 | 144 | } |
Powers | 0:043b228cfeb8 | 145 | |
Powers | 0:043b228cfeb8 | 146 | } |
Powers | 0:043b228cfeb8 | 147 | |
Powers | 0:043b228cfeb8 | 148 | void StateMachine::blinken(void) |
Powers | 0:043b228cfeb8 | 149 | { |
Powers | 0:043b228cfeb8 | 150 | printf("state - blinken \n \n"); |
Powers | 0:043b228cfeb8 | 151 | _led1 = true; |
Powers | 0:043b228cfeb8 | 152 | while(true) |
Powers | 0:043b228cfeb8 | 153 | { |
Powers | 0:043b228cfeb8 | 154 | _led4 = !_led4; |
Powers | 0:043b228cfeb8 | 155 | wait(0.250); |
Powers | 0:043b228cfeb8 | 156 | |
Powers | 0:043b228cfeb8 | 157 | if(sw1CheckFlag()) |
Powers | 0:043b228cfeb8 | 158 | { |
Powers | 0:043b228cfeb8 | 159 | state = ST_IDLE; |
Powers | 0:043b228cfeb8 | 160 | _led1 = false; |
Powers | 0:043b228cfeb8 | 161 | _led4 = false; |
Powers | 0:043b228cfeb8 | 162 | return; |
Powers | 0:043b228cfeb8 | 163 | } |
Powers | 0:043b228cfeb8 | 164 | else if(sw2CheckFlag()) |
Powers | 0:043b228cfeb8 | 165 | { |
Powers | 0:043b228cfeb8 | 166 | state = ST_TimeOut; |
Powers | 0:043b228cfeb8 | 167 | return; |
Powers | 0:043b228cfeb8 | 168 | } |
Powers | 0:043b228cfeb8 | 169 | } |
Powers | 0:043b228cfeb8 | 170 | } |
Powers | 0:043b228cfeb8 | 171 | |
Powers | 0:043b228cfeb8 | 172 | |
Powers | 0:043b228cfeb8 | 173 | |
Powers | 0:043b228cfeb8 | 174 | StateMachine statemachine(p14, p15, p12, p16, LED1, LED2, LED3, LED4); |
Powers | 0:043b228cfeb8 | 175 | |
Powers | 0:043b228cfeb8 | 176 | int main() |
Powers | 0:043b228cfeb8 | 177 | { |
Powers | 0:043b228cfeb8 | 178 | printf("-------------------------------- \n"); |
Powers | 0:043b228cfeb8 | 179 | printf("| SERIAL - DEBUG | PWR - 2019 | \n"); |
Powers | 0:043b228cfeb8 | 180 | printf("-------------------------------- \n"); |
Powers | 0:043b228cfeb8 | 181 | printf("main - 1 \n"); |
Powers | 0:043b228cfeb8 | 182 | statemachine.init(); |
Powers | 0:043b228cfeb8 | 183 | printf("main - 2 \n"); |
Powers | 0:043b228cfeb8 | 184 | statemachine.statemachine(); |
Powers | 0:043b228cfeb8 | 185 | printf("main - 3 \n"); |
Powers | 0:043b228cfeb8 | 186 | |
Powers | 0:043b228cfeb8 | 187 | } |