Alle Angaben ohne Gewähr :) ... Weiß net obs funktioniert...
Dependencies: mbed
main.cpp@0:d902e78dd583, 2015-06-16 (annotated)
- 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?
User | Revision | Line number | New 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 |