Auxiliaries I use for CreaBot
Diff: Bot_Auxiliaries.cpp
- Revision:
- 1:6f5b84940d04
- Parent:
- 0:32b17da1ddae
--- a/Bot_Auxiliaries.cpp Wed Oct 31 14:22:26 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -// ***************************************************************** -// Handle all the LEDs with some general function wrappers functions -// ***************************************************************** -#include "Bot_Auxiliaries.h" - -// Added a lookup function from a color number to a color, used by Creabot -int LED_CAR::ColNr2Color( char ColNr) -{ switch (ColNr) { - case 0: return BLACK; - case 1: return WHITE; - case 2: return RED; - case 3: return GREEN; - case 4: return BLUE; - case 5: return PURPLE; - default: return BLACK; - } -} - -void LED_CAR::LEDsOff( void ) { - StopRotation(); - StopBlink() ; - for (int lNr=0; lNr<NumLEDs; lNr++) - { SetColor(BLACK,lNr); } -} - -void LED_CAR::LEDsRainbow( void ) -{ for (int Nr=0; Nr<NumLEDs; Nr++) - { SetColor(ColNr2Color(Nr + 1),Nr); } -} - -void LED_CAR::LEDNrCol(LED_Nr aNr, int parameter) -{ - SetColor( ColNr2Color( aNr ), aNr); -} - -void LED_CAR::LEDsRainbowMove( double speed ) -{ LEDsRainbow( ); - StartRotation(0.3); -} - -void LED_CAR::LEDClignote(LED_Nr aNr, int OnOff) { - if (OnOff == 1) { - SetColor( ORANGE, aNr); - StartBlink(0.5) ;} - else { LEDsOff(); } -} - -// ***************************************************************** -// Handle all the LEDs specifically with the LED Position definitions -// ***************************************************************** - -void LED_CAR::LEDFront(int ColNr) -{ - SetColor( ColNr2Color( ColNr ), ledAvD); - SetColor( ColNr2Color( ColNr ), ledAvG); -} - -void LED_CAR::LEDRear(int ColNr) -{ - SetColor( ColNr2Color( ColNr ), ledArD); - SetColor( ColNr2Color( ColNr ), ledArG); -} - -void LED_CAR::LEDCligR(int speed) { - if ( (speed>0) && (speed<4) ) { - SetColor(ORANGE, ledAvD) ; - SetColor(ORANGE, ledArD) ; - StartBlink(float(speed)/4) ;} - else { LEDsOff(); } - } - -void LED_CAR::LEDCligL(int speed) { - if ( (speed>0) && (speed<4) ) { - SetColor(ORANGE, ledAvG) ; - SetColor(ORANGE, ledArG) ; - StartBlink(float(speed)/4) ;} - else { LEDsOff(); } -} - -void LED_CAR::LEDAnim(int speed) { - if ( (speed>0) && (speed<4) ) - { LEDsRainbowMove(float(speed)/4); } - else { LEDsOff(); } -} - - -//************************************ -// Interpreter Class Creation -//************************************ -// Strategy: the interpreter accumulates characters in its input buffer -// it flags the presence of complete lines -// it also flags Overflow of the buffer in which case all subsequent characters -// are lost until the queue is emptied, and a CR-LF is received -// Defined States of the interpreter: -// MyState = isStartNew, isLineFilling, isOverflow, isWaitNewLine}; - - -Interpreter::Interpreter() -{ Reinit( ); - MyState = isStartNew; -} - -void Interpreter::Reinit( void ) { - MyState = isWaitNewLine; // indicates no buffer overflow - WriteIndex = 0; // points to next index to write to - LinesComplete = 0; // indicates that no complete line is currently available - // Start Scanning at the start - ScanIndex = 0; - BufAvail = BuffLen;// the full buffer size is available - } - -// Barebone function, assumes that checks havee been performed by writeBuf! -void Interpreter::AddChar( char aChar ) { - if (WriteIndex == BuffLen) {WriteIndex=0;} - else {WriteIndex++;} - RingBuf[WriteIndex]=aChar; // all right, buffer it! - BufAvail--; // Buffer is shrinking - if (BufAvail==0) { MyState = isOverflow; } -} - -// High level method to add a Char to the buffer, -// Separates at Chars 10, 13, 0; replaced by a single 0 char -// Blocking write when buffer has overflowed -void Interpreter::writeBuf(char aChar) { - bool LineEnds = aChar==10 || aChar==13 || aChar==0; - switch (MyState) { - case isOverflow: break; - case isStartNew: - // avoid that consecutive CR LF are counted as multiple lines - if (!LineEnds) {AddChar(aChar ); MyState = isLineFilling; } - break; - case isLineFilling: - if (!LineEnds) {AddChar(aChar);} - else - {MyState = isStartNew; // ready for the next line - // Between consecutive commands, the endstring=NULL character is inserted - // this is to indicate that line was already counted as completed - AddChar(0 ); // append a line end char, will detect bufferFull! - LinesComplete++; } // count completed lines - break; - case isWaitNewLine: // waiting for a new line end to arrive after an overflow - if (LineEnds) { MyState = isStartNew; } - break; - default: MyState = isOverflow; // goes into error state, should never happen though - } -} // writeBuf - -// Barebone function, that performs the checks to be performed! -// Passes back the actC, and reads already the nextChar into actC -char Interpreter::GetAChar( void ) { -char oldC = actC; - if (BufAvail==BuffLen) { actC = 0; } // buffer is empty - else // something is in the buffer - { if (ScanIndex == BuffLen) {ScanIndex=0;} - else {ScanIndex++;} - actC=RingBuf[ScanIndex]; // all right, get it - BufAvail++; // Buffer is increasing - } // something is in the buffer - return oldC; -} - -// skip true blank, but also Tab characters -void Interpreter::SkipBlanks( void ) { - while(BufAvail<BuffLen && (actC==' ' || actC==9|| actC==0)) { GetAChar(); } -} // SkipBlanks - -int Interpreter::ReadAnInt( void ) { -bool Negative = false; -int Result = 0; - if (actC=='-') {Negative = true; GetAChar(); } - else if (actC=='+') {Negative = false; GetAChar(); } - while(BufAvail<BuffLen && actC>='0' && actC<='9') - { Result = Result * 10 + (GetAChar()-'0') ; } - return Negative? -Result : Result; -} // ReadAnInt - - -RD_CMD_TYPE Interpreter::ParseCommand( void ) { - RD_CMD_TYPE cmd; // locally built command - actC=RingBuf[ScanIndex]; - SkipBlanks(); - // Next Character is the command - cmd.Command = GetAChar(); - // Next Blanks are to be omitted, but are not even mandatory - SkipBlanks(); - if ((actC>='0' && actC<='9') || actC=='-' || actC=='+' ) - { cmd.Parameter= ReadAnInt(); cmd.NumParam = 1; } - else { cmd.Parameter= 0; cmd.NumParam = 0; } - SkipBlanks( ); // There should be at least a trailing NUL character to be removed - LinesComplete--; // one line less in the storage - - return cmd; // return the built command -} - - - -