Auxiliaries I use for CreaBot
Diff: Bot_Auxiliaries.h
- Revision:
- 0:32b17da1ddae
diff -r 000000000000 -r 32b17da1ddae Bot_Auxiliaries.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Bot_Auxiliaries.h Wed Oct 31 14:22:26 2018 +0000 @@ -0,0 +1,101 @@ + +#ifndef BOT_AUXILIARIES_H +#define BOT_AUXILIARIES_H + +#include "mbed.h" +#include "LED_WS2812.h" + + +// Put the LED names in the order they are chained up +enum LED_Nr{ ledAvG, ledAvD, ledArD, ledArG, NumLEDs }; + + +// ***************************************************************** +// Handle all the LEDs with some general function wrappers functions +// ***************************************************************** + +/** Control 4 LEDs around the Car: front / rear, left / right + * + * Example: + * @code + * // --- Define the PIN where the LED band is connected ----- + * LED_CAR ledBand(PB_5,4); + * Setup rainbow colors for the ledBand + * ledBand.LEDsRainbow(); + * Rotate the colors for the ledBand + * ledBand.StartRotation(0.6) ; + * Turn off the LEDs: + * ledBand.LEDsOff(); + * @endcode + */ + + +class LED_CAR: public LED_WS2812 +{ + public: + /** Create a Car-LED object to control the four LEDs around the car + * + * @param PinName Pin Name through wich the LEDs are controlled + * @param _nbLeds Number of LEDs actually implemented, defaults to 4 + */ + LED_CAR(PinName _PinOut, int _nbLeds):LED_WS2812(_PinOut, _nbLeds) { }; + + void LEDsOff( void ); + void LEDsRainbow( void ); + void LEDNrCol(LED_Nr aNr, int parameter) ; + void LEDsRainbowMove( double speed ); + void LEDClignote(LED_Nr aNr, int OnOff); + int ColNr2Color( char ColNr); + + // ***************************************************************** + // Handle all the LEDs specifically with the LED Position definitions + // ***************************************************************** + + void LEDFront(int ColNr) ; + void LEDRear(int ColNr) ; + void LEDCligR(int speed); + void LEDCligL(int speed); + void LEDAnim(int speed); +}; // class LED_CAR + +const int BuffLen = 512; + +// Define States of the interpreter +enum InterpretState { isStartNew, isLineFilling, isOverflow, isWaitNewLine}; + +typedef struct RD_CMD_TYPE { + char Command; // Holds the next read command character + int Parameter ; // Holds one int Parameter + int NumParam ; // Indicates how many parameters where found + } RD_CMD_TYPE; + + +// Uses a Ring buffer to buffer incomiing characters +// Uses a parsing function to extract lines containing a command each +class Interpreter{ + public: + // Interpreter Class Creation + Interpreter(); + void Reinit( void ); + + public: // the writing mechanics + void AddChar ( char aChar ); // Barebone function, assumes that checks havee been performed by writeBuf! + void writeBuf( char c) ; // High level method to add a Char to the buffer, + char RingBuf[BuffLen]; + InterpretState MyState;// Indicates if buffer overflow, line ended etc. + int WriteIndex ; // points to next index to write to + int BufAvail ; // indicates how much of the buffer is still available + int LinesComplete; // Indicates how many complete lines are available + + public: // the reading mechanics + RD_CMD_TYPE ParseCommand( void ) ; + int ScanIndex; // points to next index to read from to + char actC ; // holds the actual character + private: + char GetAChar ( void ); + void SkipBlanks( void ); + int ReadAnInt ( void ); + char actPP ( void ); +}; // class Interpreter + +#endif \ No newline at end of file