Ich habe bei der EventKlasse das EOT auf " " geändert, damit das Beenden der Kommunikation mit dem "." funktioniert. Im großen und ganzem müsste es funktionieren.

Dependencies:   mbed

Committer:
KagerJ
Date:
Thu Jun 23 07:35:38 2016 +0000
Revision:
0:a321a9d74411
Dieses Programm m?sste im gro?en und ganzem funktionieren.; Wichtig: Das EOT der EventKlasse habe ich den "." mit einem " " ersetzt, damit es funktioniert.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KagerJ 0:a321a9d74411 1 #include "mbed.h"
KagerJ 0:a321a9d74411 2 #include "SerialEvent.h"
KagerJ 0:a321a9d74411 3
KagerJ 0:a321a9d74411 4 Serial pc(USBTX,USBRX);
KagerJ 0:a321a9d74411 5 SerialEvent pc1(USBTX,USBRX);
KagerJ 0:a321a9d74411 6 PwmOut red(p36);
KagerJ 0:a321a9d74411 7 PwmOut green(p5);
KagerJ 0:a321a9d74411 8 PwmOut blue(p34);
KagerJ 0:a321a9d74411 9 DigitalOut led1(LED1);
KagerJ 0:a321a9d74411 10 DigitalOut led2(LED2);
KagerJ 0:a321a9d74411 11 DigitalOut led3(LED3);
KagerJ 0:a321a9d74411 12 DigitalOut led4(LED4);
KagerJ 0:a321a9d74411 13 DigitalOut led6(P1_0);
KagerJ 0:a321a9d74411 14 Timer timer;
KagerJ 0:a321a9d74411 15 Ticker tick1;
KagerJ 0:a321a9d74411 16 Ticker tick2;
KagerJ 0:a321a9d74411 17 Ticker tick3;
KagerJ 0:a321a9d74411 18 Ticker tick4;
KagerJ 0:a321a9d74411 19
KagerJ 0:a321a9d74411 20 // States
KagerJ 0:a321a9d74411 21 //typedef enum {ST_EIN, ST_AUS, ST_ERROR, ST_STATE1} nextState;
KagerJ 0:a321a9d74411 22 // alternativ
KagerJ 0:a321a9d74411 23 const int ST_BOOT = 0;
KagerJ 0:a321a9d74411 24 const int ST_AUTH = 1;
KagerJ 0:a321a9d74411 25 const int ST_STRING = 2;
KagerJ 0:a321a9d74411 26 const int ST_RECEIVE = 3;
KagerJ 0:a321a9d74411 27 const int ST_COMP = 4;
KagerJ 0:a321a9d74411 28 const int ST_SUCCESS = 5;
KagerJ 0:a321a9d74411 29 const int ST_FAIL = 6;
KagerJ 0:a321a9d74411 30 const int ST_END = 7;
KagerJ 0:a321a9d74411 31 char inString[STRMAX];
KagerJ 0:a321a9d74411 32 char stringRND[STRMAX];
KagerJ 0:a321a9d74411 33 char message[STRMAX];
KagerJ 0:a321a9d74411 34 int line= 0;
KagerJ 0:a321a9d74411 35 int tries= 0 ;
KagerJ 0:a321a9d74411 36 int poss = 0;
KagerJ 0:a321a9d74411 37 void blink();
KagerJ 0:a321a9d74411 38 void gen_random(char *s, const int len)
KagerJ 0:a321a9d74411 39 {
KagerJ 0:a321a9d74411 40 static const char alphanum[] =
KagerJ 0:a321a9d74411 41 "0123456789"
KagerJ 0:a321a9d74411 42 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
KagerJ 0:a321a9d74411 43 "abcdefghijklmnopqrstuvwxyz";
KagerJ 0:a321a9d74411 44
KagerJ 0:a321a9d74411 45 for (int i = 0; i < len; ++i) {
KagerJ 0:a321a9d74411 46 s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
KagerJ 0:a321a9d74411 47 }
KagerJ 0:a321a9d74411 48 }
KagerJ 0:a321a9d74411 49 ////----------------------------------Ticker Klasse---------------------------------
KagerJ 0:a321a9d74411 50 class Blinker {
KagerJ 0:a321a9d74411 51 public:
KagerJ 0:a321a9d74411 52 Blinker(PinName pin) : _pin(pin) {
KagerJ 0:a321a9d74411 53 _pin = 0;
KagerJ 0:a321a9d74411 54 }
KagerJ 0:a321a9d74411 55 void blink() {
KagerJ 0:a321a9d74411 56 _pin = !_pin;
KagerJ 0:a321a9d74411 57 }
KagerJ 0:a321a9d74411 58 private:
KagerJ 0:a321a9d74411 59 DigitalOut _pin;
KagerJ 0:a321a9d74411 60 };
KagerJ 0:a321a9d74411 61 Blinker t1(LED1);
KagerJ 0:a321a9d74411 62 Blinker t2(LED2);
KagerJ 0:a321a9d74411 63 Blinker t3(LED3);
KagerJ 0:a321a9d74411 64 Blinker t4(LED4);
KagerJ 0:a321a9d74411 65 // ---------------- Event Klasse --------------------------
KagerJ 0:a321a9d74411 66 class SwEvent
KagerJ 0:a321a9d74411 67 {
KagerJ 0:a321a9d74411 68 InterruptIn _isr;
KagerJ 0:a321a9d74411 69 bool _pressed;
KagerJ 0:a321a9d74411 70 void _RisingISR();
KagerJ 0:a321a9d74411 71
KagerJ 0:a321a9d74411 72 public:
KagerJ 0:a321a9d74411 73 SwEvent(PinName pin) : _isr(pin) {
KagerJ 0:a321a9d74411 74 _pressed = false;
KagerJ 0:a321a9d74411 75 }
KagerJ 0:a321a9d74411 76 int CheckFlag(); // dies muss im do-Zweig (while(true) Schleife) ständig abgefragt werden
KagerJ 0:a321a9d74411 77 void InitIsr();
KagerJ 0:a321a9d74411 78 };
KagerJ 0:a321a9d74411 79
KagerJ 0:a321a9d74411 80 int SwEvent::CheckFlag()
KagerJ 0:a321a9d74411 81 {
KagerJ 0:a321a9d74411 82 if( _pressed ) {
KagerJ 0:a321a9d74411 83 _pressed = false;
KagerJ 0:a321a9d74411 84 return 1;
KagerJ 0:a321a9d74411 85 }
KagerJ 0:a321a9d74411 86 return 0;
KagerJ 0:a321a9d74411 87 }
KagerJ 0:a321a9d74411 88
KagerJ 0:a321a9d74411 89 void SwEvent::InitIsr()
KagerJ 0:a321a9d74411 90 {
KagerJ 0:a321a9d74411 91 _isr.rise(this, &SwEvent::_RisingISR);
KagerJ 0:a321a9d74411 92 }
KagerJ 0:a321a9d74411 93
KagerJ 0:a321a9d74411 94 void SwEvent::_RisingISR()
KagerJ 0:a321a9d74411 95 {
KagerJ 0:a321a9d74411 96 if( _isr.read() )
KagerJ 0:a321a9d74411 97 _pressed = true;
KagerJ 0:a321a9d74411 98 }
KagerJ 0:a321a9d74411 99
KagerJ 0:a321a9d74411 100 SwEvent sw1(P0_10);
KagerJ 0:a321a9d74411 101
KagerJ 0:a321a9d74411 102 // ----------------- Stm Klasse -----------------------------
KagerJ 0:a321a9d74411 103 class Stm
KagerJ 0:a321a9d74411 104 {
KagerJ 0:a321a9d74411 105 public:
KagerJ 0:a321a9d74411 106 Stm() {
KagerJ 0:a321a9d74411 107 state=ST_BOOT;
KagerJ 0:a321a9d74411 108 }
KagerJ 0:a321a9d74411 109
KagerJ 0:a321a9d74411 110 void Boot();
KagerJ 0:a321a9d74411 111 void Auth();
KagerJ 0:a321a9d74411 112 void String();
KagerJ 0:a321a9d74411 113 void Receive();
KagerJ 0:a321a9d74411 114 void Comp();
KagerJ 0:a321a9d74411 115 void Success();
KagerJ 0:a321a9d74411 116 void Fail();
KagerJ 0:a321a9d74411 117 void End();
KagerJ 0:a321a9d74411 118
KagerJ 0:a321a9d74411 119 int state;
KagerJ 0:a321a9d74411 120 };
KagerJ 0:a321a9d74411 121
KagerJ 0:a321a9d74411 122
KagerJ 0:a321a9d74411 123 void Stm::Boot()
KagerJ 0:a321a9d74411 124 { tick1.detach();
KagerJ 0:a321a9d74411 125 tick2.detach();
KagerJ 0:a321a9d74411 126 tick3.detach();
KagerJ 0:a321a9d74411 127 tick4.detach();
KagerJ 0:a321a9d74411 128 pc.printf("Hello\n");
KagerJ 0:a321a9d74411 129 timer.start();
KagerJ 0:a321a9d74411 130 while(true) {
KagerJ 0:a321a9d74411 131 led1 = led2 = led3 = led4 = 0;
KagerJ 0:a321a9d74411 132
KagerJ 0:a321a9d74411 133 if(timer.read() >= 1) {
KagerJ 0:a321a9d74411 134 state = ST_AUTH;
KagerJ 0:a321a9d74411 135 led1 = 1;
KagerJ 0:a321a9d74411 136 timer.stop();
KagerJ 0:a321a9d74411 137 timer.reset();
KagerJ 0:a321a9d74411 138 return;
KagerJ 0:a321a9d74411 139 }
KagerJ 0:a321a9d74411 140 }
KagerJ 0:a321a9d74411 141 }
KagerJ 0:a321a9d74411 142
KagerJ 0:a321a9d74411 143 void Stm::Auth()
KagerJ 0:a321a9d74411 144 {
KagerJ 0:a321a9d74411 145
KagerJ 0:a321a9d74411 146
KagerJ 0:a321a9d74411 147 pc.printf("Press Sw 2\n");
KagerJ 0:a321a9d74411 148 while(true) {
KagerJ 0:a321a9d74411 149 led6 = 1;
KagerJ 0:a321a9d74411 150 if(sw1.CheckFlag()) {
KagerJ 0:a321a9d74411 151 led6 = 0;
KagerJ 0:a321a9d74411 152 state = ST_STRING;
KagerJ 0:a321a9d74411 153 return;
KagerJ 0:a321a9d74411 154 }
KagerJ 0:a321a9d74411 155
KagerJ 0:a321a9d74411 156 }
KagerJ 0:a321a9d74411 157 }
KagerJ 0:a321a9d74411 158
KagerJ 0:a321a9d74411 159
KagerJ 0:a321a9d74411 160 void Stm::String()
KagerJ 0:a321a9d74411 161 {
KagerJ 0:a321a9d74411 162 tick1.detach();
KagerJ 0:a321a9d74411 163 tick2.detach();
KagerJ 0:a321a9d74411 164 tick3.detach();
KagerJ 0:a321a9d74411 165 tick4.detach();
KagerJ 0:a321a9d74411 166 gen_random(stringRND,5);
KagerJ 0:a321a9d74411 167 pc.printf("RND String lautet: %s \n", stringRND);
KagerJ 0:a321a9d74411 168 pc.printf("Geben Sie ihn nun erneut ein: \n");
KagerJ 0:a321a9d74411 169 timer.start();
KagerJ 0:a321a9d74411 170 while(true) {
KagerJ 0:a321a9d74411 171 led1 = 0;
KagerJ 0:a321a9d74411 172 led2 = 1;
KagerJ 0:a321a9d74411 173
KagerJ 0:a321a9d74411 174 //s[len] = 0;
KagerJ 0:a321a9d74411 175 state = ST_RECEIVE;
KagerJ 0:a321a9d74411 176 return;
KagerJ 0:a321a9d74411 177 }
KagerJ 0:a321a9d74411 178 }
KagerJ 0:a321a9d74411 179
KagerJ 0:a321a9d74411 180
KagerJ 0:a321a9d74411 181 void Stm::Receive()
KagerJ 0:a321a9d74411 182 {
KagerJ 0:a321a9d74411 183 tick1.detach();
KagerJ 0:a321a9d74411 184 tick2.detach();
KagerJ 0:a321a9d74411 185 tick3.detach();
KagerJ 0:a321a9d74411 186 tick4.detach();
KagerJ 0:a321a9d74411 187 //pc1.pc_recv();
KagerJ 0:a321a9d74411 188 if(pc1.checkFlag()) {
KagerJ 0:a321a9d74411 189 pc1.getString(inString);
KagerJ 0:a321a9d74411 190 //pc1.scanf(inString);
KagerJ 0:a321a9d74411 191 pc.printf("%s\n", inString);
KagerJ 0:a321a9d74411 192 state = ST_COMP;
KagerJ 0:a321a9d74411 193 return;
KagerJ 0:a321a9d74411 194
KagerJ 0:a321a9d74411 195 }
KagerJ 0:a321a9d74411 196 }
KagerJ 0:a321a9d74411 197
KagerJ 0:a321a9d74411 198 void Stm::Comp()
KagerJ 0:a321a9d74411 199 {
KagerJ 0:a321a9d74411 200 tick1.detach();
KagerJ 0:a321a9d74411 201 tick2.detach();
KagerJ 0:a321a9d74411 202 tick3.detach();
KagerJ 0:a321a9d74411 203 tick4.detach();
KagerJ 0:a321a9d74411 204 if(strncmp(stringRND,inString,5) == 0) {
KagerJ 0:a321a9d74411 205 pc.printf("Sie haben %f Sekunden fuer Ihre Authentifikation benoetigt\n", timer.read());
KagerJ 0:a321a9d74411 206 state = ST_SUCCESS;
KagerJ 0:a321a9d74411 207 return;
KagerJ 0:a321a9d74411 208 } else if( tries == 3) {
KagerJ 0:a321a9d74411 209 state = ST_END;
KagerJ 0:a321a9d74411 210 return;
KagerJ 0:a321a9d74411 211 } else {
KagerJ 0:a321a9d74411 212 tries++;
KagerJ 0:a321a9d74411 213 poss = 4 - tries;
KagerJ 0:a321a9d74411 214 pc.printf("Sie haben noch %d Moeglichkeiten, um sich richtig zu authentifizieren",poss);
KagerJ 0:a321a9d74411 215 state = ST_RECEIVE;
KagerJ 0:a321a9d74411 216 }
KagerJ 0:a321a9d74411 217 }
KagerJ 0:a321a9d74411 218
KagerJ 0:a321a9d74411 219 void Stm::Success()
KagerJ 0:a321a9d74411 220 {
KagerJ 0:a321a9d74411 221 tick1.detach();
KagerJ 0:a321a9d74411 222 tick2.detach();
KagerJ 0:a321a9d74411 223 tick3.detach();
KagerJ 0:a321a9d74411 224 tick4.detach();
KagerJ 0:a321a9d74411 225 printf("WELCOME!");
KagerJ 0:a321a9d74411 226 led1 = led2 = led3 = led4 = 1;
KagerJ 0:a321a9d74411 227 //message[STRMAX] = '\0';
KagerJ 0:a321a9d74411 228 while(true) {
KagerJ 0:a321a9d74411 229 if(pc1.checkFlag()) {
KagerJ 0:a321a9d74411 230 pc1.getString(message);
KagerJ 0:a321a9d74411 231 line++;
KagerJ 0:a321a9d74411 232 pc.printf("%d:%d>%s\n",line,strlen(message),message);
KagerJ 0:a321a9d74411 233 if(message[0] == '.') {
KagerJ 0:a321a9d74411 234 state = ST_AUTH;
KagerJ 0:a321a9d74411 235 return;
KagerJ 0:a321a9d74411 236 }
KagerJ 0:a321a9d74411 237 }
KagerJ 0:a321a9d74411 238 }
KagerJ 0:a321a9d74411 239 }
KagerJ 0:a321a9d74411 240
KagerJ 0:a321a9d74411 241 void Stm::Fail()
KagerJ 0:a321a9d74411 242 {
KagerJ 0:a321a9d74411 243 tick1.detach();
KagerJ 0:a321a9d74411 244 tick2.detach();
KagerJ 0:a321a9d74411 245 tick3.detach();
KagerJ 0:a321a9d74411 246 tick4.detach();
KagerJ 0:a321a9d74411 247 while(true) {
KagerJ 0:a321a9d74411 248
KagerJ 0:a321a9d74411 249 led1 = led3 = led4 = 0;
KagerJ 0:a321a9d74411 250 led2 = 1;
KagerJ 0:a321a9d74411 251 state = ST_END;
KagerJ 0:a321a9d74411 252 return;
KagerJ 0:a321a9d74411 253 }
KagerJ 0:a321a9d74411 254 }
KagerJ 0:a321a9d74411 255
KagerJ 0:a321a9d74411 256
KagerJ 0:a321a9d74411 257 void Stm::End()
KagerJ 0:a321a9d74411 258 {
KagerJ 0:a321a9d74411 259 //led1 = led2 = led3 = led4 = 1;
KagerJ 0:a321a9d74411 260 tick1.attach(&t1, &Blinker::blink, 0.2);
KagerJ 0:a321a9d74411 261 tick2.attach(&t2, &Blinker::blink, 0.2);
KagerJ 0:a321a9d74411 262 tick3.attach(&t3, &Blinker::blink, 0.2);
KagerJ 0:a321a9d74411 263 tick4.attach(&t4, &Blinker::blink, 0.2);
KagerJ 0:a321a9d74411 264 /*while(true){
KagerJ 0:a321a9d74411 265 if(timer.read_ms()%200 == 0){
KagerJ 0:a321a9d74411 266 led1 =~ led1;
KagerJ 0:a321a9d74411 267 led2 =~ led2;
KagerJ 0:a321a9d74411 268 led3 =~ led3;
KagerJ 0:a321a9d74411 269 led4 =~ led4;
KagerJ 0:a321a9d74411 270 }
KagerJ 0:a321a9d74411 271 }*/
KagerJ 0:a321a9d74411 272 tries = 0;
KagerJ 0:a321a9d74411 273 pc.printf("%d", timer.read());
KagerJ 0:a321a9d74411 274 state = ST_AUTH;
KagerJ 0:a321a9d74411 275 return;
KagerJ 0:a321a9d74411 276 }
KagerJ 0:a321a9d74411 277
KagerJ 0:a321a9d74411 278
KagerJ 0:a321a9d74411 279
KagerJ 0:a321a9d74411 280
KagerJ 0:a321a9d74411 281 Stm stm;
KagerJ 0:a321a9d74411 282
KagerJ 0:a321a9d74411 283 void stateMachine()
KagerJ 0:a321a9d74411 284 {
KagerJ 0:a321a9d74411 285 switch (stm.state) {
KagerJ 0:a321a9d74411 286 case ST_BOOT:
KagerJ 0:a321a9d74411 287 stm.Boot();
KagerJ 0:a321a9d74411 288 break;
KagerJ 0:a321a9d74411 289 case ST_AUTH:
KagerJ 0:a321a9d74411 290 stm.Auth();
KagerJ 0:a321a9d74411 291 break;
KagerJ 0:a321a9d74411 292 case ST_STRING:
KagerJ 0:a321a9d74411 293 stm.String();
KagerJ 0:a321a9d74411 294 break;
KagerJ 0:a321a9d74411 295 case ST_RECEIVE:
KagerJ 0:a321a9d74411 296 stm.Receive();
KagerJ 0:a321a9d74411 297 break;
KagerJ 0:a321a9d74411 298 case ST_COMP:
KagerJ 0:a321a9d74411 299 stm.Comp();
KagerJ 0:a321a9d74411 300 break;
KagerJ 0:a321a9d74411 301 case ST_SUCCESS:
KagerJ 0:a321a9d74411 302 stm.Success();
KagerJ 0:a321a9d74411 303 break;
KagerJ 0:a321a9d74411 304 case ST_FAIL:
KagerJ 0:a321a9d74411 305 stm.Fail();
KagerJ 0:a321a9d74411 306 break;
KagerJ 0:a321a9d74411 307 case ST_END:
KagerJ 0:a321a9d74411 308 stm.End();
KagerJ 0:a321a9d74411 309 break;
KagerJ 0:a321a9d74411 310
KagerJ 0:a321a9d74411 311
KagerJ 0:a321a9d74411 312 }
KagerJ 0:a321a9d74411 313 }
KagerJ 0:a321a9d74411 314
KagerJ 0:a321a9d74411 315 int main()
KagerJ 0:a321a9d74411 316 {
KagerJ 0:a321a9d74411 317 //printf("Hello STM\n");
KagerJ 0:a321a9d74411 318 sw1.InitIsr();
KagerJ 0:a321a9d74411 319
KagerJ 0:a321a9d74411 320 red=green=1;
KagerJ 0:a321a9d74411 321 while(1) {
KagerJ 0:a321a9d74411 322 stateMachine();
KagerJ 0:a321a9d74411 323 }
KagerJ 0:a321a9d74411 324 }