UEBUNG - Statemachine - SERIAL DEBUG Einzelne Schritte - SERIAL Ausgabe

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }