Alle Angaben ohne Gewähr :) ... Weiß net obs funktioniert...

Dependencies:   mbed

Committer:
thesteira
Date:
Tue Jun 16 14:08:40 2015 +0000
Revision:
0:d902e78dd583
Is nur a ungetestete Version, Grunds?tzlich sollte die volle Funktionalit?t vorhanden sein...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
thesteira 0:d902e78dd583 1 #include "mbed.h"
thesteira 0:d902e78dd583 2
thesteira 0:d902e78dd583 3 #define ARR_SIZE 5
thesteira 0:d902e78dd583 4
thesteira 0:d902e78dd583 5 BusOut _led1(LED1), _led2(LED2), _led3(LED3), _led4(LED4);
thesteira 0:d902e78dd583 6 Serial _pc(USBTX, USBRX);
thesteira 0:d902e78dd583 7 InterruptIn _asyncError(p14);
thesteira 0:d902e78dd583 8
thesteira 0:d902e78dd583 9 char _recChar=0;
thesteira 0:d902e78dd583 10 char _recArr[ARR_SIZE];
thesteira 0:d902e78dd583 11 int _index=0;
thesteira 0:d902e78dd583 12 int _StateError=0;
thesteira 0:d902e78dd583 13 bool _error;
thesteira 0:d902e78dd583 14 Ticker _tick;
thesteira 0:d902e78dd583 15 bool _recAllowedFlag;
thesteira 0:d902e78dd583 16
thesteira 0:d902e78dd583 17 void Init();
thesteira 0:d902e78dd583 18 void ReadData();
thesteira 0:d902e78dd583 19 void SetError();
thesteira 0:d902e78dd583 20 void CheckWord();
thesteira 0:d902e78dd583 21 void FlushSerialBuffer();
thesteira 0:d902e78dd583 22 void flashLeds();
thesteira 0:d902e78dd583 23
thesteira 0:d902e78dd583 24
thesteira 0:d902e78dd583 25
thesteira 0:d902e78dd583 26
thesteira 0:d902e78dd583 27 int main()
thesteira 0:d902e78dd583 28 {
thesteira 0:d902e78dd583 29
thesteira 0:d902e78dd583 30 Init();
thesteira 0:d902e78dd583 31 _pc.attach(&ReadData);
thesteira 0:d902e78dd583 32 _asyncError.rise(&SetError);
thesteira 0:d902e78dd583 33
thesteira 0:d902e78dd583 34 while(1) {
thesteira 0:d902e78dd583 35 if(_error) {
thesteira 0:d902e78dd583 36
thesteira 0:d902e78dd583 37 switch (_StateError) {
thesteira 0:d902e78dd583 38 case 0:
thesteira 0:d902e78dd583 39 _pc.printf("Unbekannter Befehl \r\n");
thesteira 0:d902e78dd583 40 _tick.attach_us(&flashLeds, 100*1000);
thesteira 0:d902e78dd583 41 break;
thesteira 0:d902e78dd583 42
thesteira 0:d902e78dd583 43
thesteira 0:d902e78dd583 44 case 1:
thesteira 0:d902e78dd583 45 _pc.printf("Falscher Syntax \r\n");
thesteira 0:d902e78dd583 46 _tick.attach_us(&flashLeds, 100*300);
thesteira 0:d902e78dd583 47 break;
thesteira 0:d902e78dd583 48
thesteira 0:d902e78dd583 49 case 2:
thesteira 0:d902e78dd583 50 _led1=0;
thesteira 0:d902e78dd583 51 _led2=1;
thesteira 0:d902e78dd583 52 _led3=1;
thesteira 0:d902e78dd583 53 _led4=0;
thesteira 0:d902e78dd583 54 break;
thesteira 0:d902e78dd583 55 }
thesteira 0:d902e78dd583 56 }
thesteira 0:d902e78dd583 57 }
thesteira 0:d902e78dd583 58 }
thesteira 0:d902e78dd583 59 // Init
thesteira 0:d902e78dd583 60
thesteira 0:d902e78dd583 61 void Init()
thesteira 0:d902e78dd583 62 {
thesteira 0:d902e78dd583 63 _led1=0;
thesteira 0:d902e78dd583 64 _led2=0;
thesteira 0:d902e78dd583 65 _led3=0;
thesteira 0:d902e78dd583 66 _led4=0;
thesteira 0:d902e78dd583 67 _error=false;
thesteira 0:d902e78dd583 68 _recAllowedFlag=false;
thesteira 0:d902e78dd583 69 _pc.baud(115200);
thesteira 0:d902e78dd583 70 _pc.format(8,SerialBase::None,1);
thesteira 0:d902e78dd583 71 _pc.printf("Hallo\r\n");
thesteira 0:d902e78dd583 72 _pc.printf("Geben sie den Steuerstring ein : \r\n");
thesteira 0:d902e78dd583 73 _pc.printf("Format: a or A -> LEDs aus \r\n");
thesteira 0:d902e78dd583 74 }
thesteira 0:d902e78dd583 75
thesteira 0:d902e78dd583 76
thesteira 0:d902e78dd583 77 void ReadData()
thesteira 0:d902e78dd583 78 {
thesteira 0:d902e78dd583 79 _error=false;
thesteira 0:d902e78dd583 80 _StateError=0;
thesteira 0:d902e78dd583 81 _recChar = _pc.getc();
thesteira 0:d902e78dd583 82 _recArr[_index] = _recChar;
thesteira 0:d902e78dd583 83 _index++;
thesteira 0:d902e78dd583 84 if(_recChar== 0 || _recChar == '\r') {
thesteira 0:d902e78dd583 85 if(_error==false)
thesteira 0:d902e78dd583 86 CheckWord();
thesteira 0:d902e78dd583 87 }
thesteira 0:d902e78dd583 88
thesteira 0:d902e78dd583 89 }
thesteira 0:d902e78dd583 90
thesteira 0:d902e78dd583 91 void SetError()
thesteira 0:d902e78dd583 92 {
thesteira 0:d902e78dd583 93 _error=true;
thesteira 0:d902e78dd583 94 _StateError=2;
thesteira 0:d902e78dd583 95 }
thesteira 0:d902e78dd583 96 void CheckWord()
thesteira 0:d902e78dd583 97 {
thesteira 0:d902e78dd583 98 // reset LED´s
thesteira 0:d902e78dd583 99 if(_recArr[0] == 'r' || _recArr[0] == 'R') {
thesteira 0:d902e78dd583 100 if(_recArr[3]== 1)
thesteira 0:d902e78dd583 101 _led1=0;
thesteira 0:d902e78dd583 102
thesteira 0:d902e78dd583 103 if(_recArr[3]== 2)
thesteira 0:d902e78dd583 104 _led2=0;
thesteira 0:d902e78dd583 105
thesteira 0:d902e78dd583 106 if(_recArr[3]== 3)
thesteira 0:d902e78dd583 107 _led3=0;
thesteira 0:d902e78dd583 108
thesteira 0:d902e78dd583 109 if(_recArr[3]== 4)
thesteira 0:d902e78dd583 110 _led4=0;
thesteira 0:d902e78dd583 111
thesteira 0:d902e78dd583 112
thesteira 0:d902e78dd583 113 FlushSerialBuffer();
thesteira 0:d902e78dd583 114
thesteira 0:d902e78dd583 115 }
thesteira 0:d902e78dd583 116 // set LED
thesteira 0:d902e78dd583 117 if(_recArr[0] == 's' || _recArr[0] == 'S') {
thesteira 0:d902e78dd583 118 if(_recArr[3]== 1)
thesteira 0:d902e78dd583 119 _led1=1;
thesteira 0:d902e78dd583 120
thesteira 0:d902e78dd583 121 if(_recArr[3]== 2)
thesteira 0:d902e78dd583 122 _led2=1;
thesteira 0:d902e78dd583 123
thesteira 0:d902e78dd583 124 if(_recArr[3]== 3)
thesteira 0:d902e78dd583 125 _led3=1;
thesteira 0:d902e78dd583 126
thesteira 0:d902e78dd583 127 if(_recArr[3]== 4)
thesteira 0:d902e78dd583 128 _led4=1;
thesteira 0:d902e78dd583 129
thesteira 0:d902e78dd583 130 FlushSerialBuffer();
thesteira 0:d902e78dd583 131 }
thesteira 0:d902e78dd583 132 // invert all LED´s
thesteira 0:d902e78dd583 133 if(_recArr[0] =='I') {
thesteira 0:d902e78dd583 134 _led1=!_led1;
thesteira 0:d902e78dd583 135 _led2=!_led2;
thesteira 0:d902e78dd583 136 _led3=!_led3;
thesteira 0:d902e78dd583 137 _led4=!_led4;
thesteira 0:d902e78dd583 138 FlushSerialBuffer();
thesteira 0:d902e78dd583 139 }
thesteira 0:d902e78dd583 140 // check for correct command
thesteira 0:d902e78dd583 141 if(_recArr[0]!=('s'||'S'||'r'||'R'||'I')) {
thesteira 0:d902e78dd583 142 _error=true;
thesteira 0:d902e78dd583 143 _StateError=1;
thesteira 0:d902e78dd583 144 }
thesteira 0:d902e78dd583 145 // check for syntax error
thesteira 0:d902e78dd583 146 if(_recArr[3]>5 || _recArr[3]<1) {
thesteira 0:d902e78dd583 147 _error=true;
thesteira 0:d902e78dd583 148 _StateError=2;
thesteira 0:d902e78dd583 149 }
thesteira 0:d902e78dd583 150
thesteira 0:d902e78dd583 151 _pc.printf(" - Eingabe beendet; Wort = %s\r\n", _recArr);
thesteira 0:d902e78dd583 152
thesteira 0:d902e78dd583 153
thesteira 0:d902e78dd583 154 _pc.printf("Geben sie den Steuerstring ein : \r\n");
thesteira 0:d902e78dd583 155 _pc.printf("Format siehe Blatt \r\n");
thesteira 0:d902e78dd583 156
thesteira 0:d902e78dd583 157 }
thesteira 0:d902e78dd583 158
thesteira 0:d902e78dd583 159 void FlushSerialBuffer()
thesteira 0:d902e78dd583 160 {
thesteira 0:d902e78dd583 161 while (_pc.readable()) {
thesteira 0:d902e78dd583 162 _pc.getc();
thesteira 0:d902e78dd583 163 }
thesteira 0:d902e78dd583 164 }
thesteira 0:d902e78dd583 165
thesteira 0:d902e78dd583 166 // flash all led´s
thesteira 0:d902e78dd583 167 void flashLeds()
thesteira 0:d902e78dd583 168 {
thesteira 0:d902e78dd583 169 _led1=!_led1;
thesteira 0:d902e78dd583 170 _led2=!_led2;
thesteira 0:d902e78dd583 171 _led3=!_led3;
thesteira 0:d902e78dd583 172 _led4=!_led4;
thesteira 0:d902e78dd583 173 }
thesteira 0:d902e78dd583 174