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

Dependencies:   mbed

main.cpp

Committer:
thesteira
Date:
2015-06-16
Revision:
0:d902e78dd583

File content as of revision 0:d902e78dd583:

#include "mbed.h"

#define ARR_SIZE 5

BusOut _led1(LED1), _led2(LED2), _led3(LED3), _led4(LED4);
Serial _pc(USBTX, USBRX);
InterruptIn _asyncError(p14);

char _recChar=0;
char _recArr[ARR_SIZE];
int _index=0;
int _StateError=0;
bool _error;
Ticker _tick;
bool _recAllowedFlag;

void Init();
void ReadData();
void SetError();
void CheckWord();
void FlushSerialBuffer();
void flashLeds();




int main()
{

    Init();
    _pc.attach(&ReadData);
    _asyncError.rise(&SetError);

    while(1) {
        if(_error) {

            switch (_StateError) {
                case 0:
                    _pc.printf("Unbekannter Befehl \r\n");
                    _tick.attach_us(&flashLeds, 100*1000);
                    break;


                case 1:
                    _pc.printf("Falscher Syntax \r\n");
                    _tick.attach_us(&flashLeds, 100*300);
                    break;

                case 2:
                    _led1=0;
                    _led2=1;
                    _led3=1;
                    _led4=0;
                    break;
            }
        }
    }
}
// Init

void Init()
{
    _led1=0;
    _led2=0;
    _led3=0;
    _led4=0;
    _error=false;
    _recAllowedFlag=false;
    _pc.baud(115200);
    _pc.format(8,SerialBase::None,1);
    _pc.printf("Hallo\r\n");
    _pc.printf("Geben sie den Steuerstring ein : \r\n");
    _pc.printf("Format: a or A -> LEDs aus \r\n");
}


void ReadData()
{
    _error=false;
    _StateError=0;
    _recChar = _pc.getc();
    _recArr[_index] = _recChar;
    _index++;
    if(_recChar== 0 || _recChar == '\r') {
        if(_error==false)
            CheckWord();
    }

}

void SetError()
{
    _error=true;
    _StateError=2;
}
void CheckWord()
{
// reset LED´s
    if(_recArr[0] == 'r' ||   _recArr[0] == 'R') {
        if(_recArr[3]== 1)
            _led1=0;

        if(_recArr[3]== 2)
            _led2=0;

        if(_recArr[3]== 3)
            _led3=0;

        if(_recArr[3]== 4)
            _led4=0;


        FlushSerialBuffer();

    }
// set LED
    if(_recArr[0] == 's' ||   _recArr[0] == 'S') {
        if(_recArr[3]== 1)
            _led1=1;

        if(_recArr[3]== 2)
            _led2=1;

        if(_recArr[3]== 3)
            _led3=1;

        if(_recArr[3]== 4)
            _led4=1;

        FlushSerialBuffer();
    }
// invert all LED´s
    if(_recArr[0] =='I') {
        _led1=!_led1;
        _led2=!_led2;
        _led3=!_led3;
        _led4=!_led4;
        FlushSerialBuffer();
    }
// check for correct command
    if(_recArr[0]!=('s'||'S'||'r'||'R'||'I')) {
        _error=true;
        _StateError=1;
    }
// check for syntax error
    if(_recArr[3]>5 || _recArr[3]<1) {
        _error=true;
        _StateError=2;
    }

    _pc.printf(" - Eingabe beendet; Wort =  %s\r\n", _recArr);


    _pc.printf("Geben sie den Steuerstring ein : \r\n");
    _pc.printf("Format siehe Blatt  \r\n");

}

void FlushSerialBuffer()
{
    while (_pc.readable()) {
        _pc.getc();
    }
}

// flash all led´s
void flashLeds()
{
    _led1=!_led1;
    _led2=!_led2;
    _led3=!_led3;
    _led4=!_led4;
}