This is a library for the DIGI-DOT-BOOSTER which can control LED stripes using the single wire protocol - ws2812 and compatible as well as RGBW LEDs like SK6812. Detailed information including the datasheet and protocol description are available here: http://www.led-genial.de/DIGI-DOT-Booster-WS2812-und-SK6812-ueber-SPI-Schnittstelle-ansteuern DIGI-DOT-BOOSTER acts as a SPI slave and waits for commands sent by a SPI master. This Library provides an easy to use abstraction layer for commands supported by the DD-Booster and adds some additional effects.
Dependents: DD-Booster-waterdrop BLE_DD-Booster
Diff: DDBooster.h
- Revision:
- 0:9e96b2bb1958
- Child:
- 2:4c1e47117cf8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DDBooster.h Mon Mar 06 13:10:55 2017 +0000 @@ -0,0 +1,205 @@ +/* + * DDBoster.h - Library to control the Digi-Dot-Booster using a high-level API + * + * https://github.com/Gamadril/DD-Booster-mbed + * MIT License + */ +#ifndef DD_BOOSTER_DDBOOSTER_H +#define DD_BOOSTER_DDBOOSTER_H + +#include <mbed.h> + +/** + * @brief Class acts as a wrapper around SPI calls to control the Digi-Dot-Booster. + * + * After creation of the class instance SPI is configured with default values (12MHz, MSB first, mode 0). + * By default the library uses the SS pin of mbed platform for the communication with the Digi-Dot-Booster. + * If you prefer to use another digital pin for chip select use configurePins to set it. + * Using configurePins you can also set a reset pin used to toggle the hardware reset of the DD-Booster. + * + * Before calling any functions you have first to initialize the DD-Booster by calling init() with the number of the LEDs (max. 256), + * their type (RGB or RGBW) and the color order (RGB or GRB). Both last parameters are optional - DD-Booster is + * configured for the ws2812 LEDS (RGB type with GRB color order). + * + * When calling the functions the corresponding values are sent to the DD-Booster, but only + * after the show() call the LEDs are really addressed with the current state of the values buffer. + */ +class DDBooster { +public: + + /** + * LED type. Stores the number of bits used for the color of one LED. + * LED_RGB is the default value used by the DD-Booster + */ + enum LedType { + LED_RGB = 24, + LED_RGBW = 32 + }; + + /** + * LED color order. ws2812 is using GRB order and it's the default color order + * for the DD-Booster. + */ + enum LedColorOrder { + ORDER_RGB, + ORDER_GRB + }; + + /** + * Default constructor. Initializes SPI interface at 12MHz, MSB first, mode 0 + * Assigns used pins for SPI communication and reset pin to reset DD-Booster. + * To be able to do a hardware reset of the DD-Booster, connect a digital IO + * pin to the RESET pin of the DD-Booster. + * @param MOSI - Digital pin of SPI MOSI line + * @param SCK - Digital pin of SPI clock + * @param CS - Digital pin of SPI chip select + * @param resetPin - Digital pin connected to the RESET pin of the DD-Booster, Optional, set to NC if missing + */ + DDBooster(PinName MOSI, PinName SCK, PinName CS, PinName RESET = NC); + + /** + * Performs initial configuration of the DD-Booster to set the number of used LEDs and their type. + * DD-Booster supports max. 256 LEDs. + * @param ledCount - Number of used LEDs + * @param ledType - Type of LEDs used. RGB is default + * @param colorOrder - LED color order. GRB is default + */ + void init(uint16_t ledCount, LedType ledType = LED_RGB, LedColorOrder colorOrder = ORDER_GRB); + + /** + * Performs a hardware reset of the DD-Booster by toggling it's RESET pin. + * To use this function, set the corresponding pin first using configurePins otherwise + * the call of reset() does nothing. + */ + void reset(); + + /** + * Sets a LED color for next operations using RGB format until another color + * set operation overwrites it. + * @param r - Red part of the color value (0 - 255) + * @param g - Green part of the color value (0 - 255) + * @param b - Blue part of the color value (0 - 255) + */ + void setRGB(uint8_t r, uint8_t g, uint8_t b); + + /** + * Sets a LED color for next operations using RGBW format until another color + * set operation overwrites it. + * @param r - Red part of the color value (0 - 255) + * @param g - Green part of the color value (0 - 255) + * @param b - Blue part of the color value (0 - 255) + * @param w - White LED level (0 - 255) + */ + void setRGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w); + + /** + * Sets a LED color for next operations using HSV format until another color + * set operation overwrites it. + * @param h - Hue part of the color value (0 - 359) + * @param s - Saturation part of the color value (0 - 255) + * @param v - Value part of the color value (0 - 255) + */ + void setHSV(uint16_t h, uint8_t s, uint8_t v); + + /** + * Assign the previously set color value to a single LED. + * @param index - Index of of the LED to set. Index starts with 0 + */ + void setLED(uint8_t index); + + /** + * Clears a single LED by setting its color to RGB(0,0,0). + * Internally it simply sends setRGB(0,0,0) and setLED(index). + * @param index - Index of of the LED to clear. Index starts with 0 + */ + void clearLED(uint8_t index); + + /** + * Assign the previously set color value to a all LEDs. + */ + void setAll(); + + /** + * Clears all LEDs by setting their color to RGB(0,0,0). + * Internally it simply sends setRGB(0,0,0) and setAll(). + */ + void clearAll(); + + /** + * Assign the previously set color value to a range of LEDs. + * @param start - Index of the first LED in the range to set. Index starts with 0 + * @param end - Index of the last LED in the range to set + */ + void setRange(uint8_t start, uint8_t end); + + /** + * Creates a rainbow effect in a range. + * @param h - Hue part of the color value (0 - 359) + * @param s - Saturation part of the color value (0 - 255) + * @param v - Value part of the color value (0 - 255) + * @param start - Index of the first LED in the range to set. Index starts with 0 + * @param end - Index of the last LED in the range to set + * @param step - Step value to increment between 2 LEDs. Recommended values 2 - 20 + */ + void setRainbow(uint16_t h, uint8_t s, uint8_t v, uint8_t start, uint8_t end, uint8_t step); + + /** + * Creates a gradient from one color to another. start and end index can have negative + * values to make a gradient starting outside the visible area showing only it's + * currently visible part considering the intermediate color values. + * @param start - Index of the first LED in the range. Can be negative. + * @param end - Index of the last LED in the range. Can be greater than the number of LEDs + * @param from - RGB value of the start color + * @param to - RGB value of the end color + */ + void setGradient(int start, int end, uint8_t from[3], uint8_t to[3]); + + /** + * Shifts up the color values of the LEDs in a range. + * @param start - Index of the first LED in the range. Index starts with 0 + * @param end - Index of the last LED in the range + * @param count - Number of LEDs/steps to shift up + */ + void shiftUp(uint8_t start, uint8_t end, uint8_t count); + + /** + * Shifts down the color values of the LEDs in a range. + * @param start - Index of the first LED in the range. Index starts with 0 + * @param end - Index of the last LED in the range + * @param count - Number of LEDs/steps to shift down + */ + void shiftDown(uint8_t start, uint8_t end, uint8_t count); + + /** + * Copies a color value of a LED to another one. + * @param from - Index of the LED to copy from + * @param to - Index of the LED to copy to + */ + void copyLED(uint8_t from, uint8_t to); + + /** + * Copies the whole range several times in a row. + * @param start - Index of the first LED in the range. Index starts with 0 + * @param end - Index of the last LED in the range + * @param count - Number of copy operation + */ + void repeat(uint8_t start, uint8_t end, uint8_t count); + + /** + * Shows the changes previously made by sending all values to the LEDs. + */ + void show(); + + /** + * Sends raw byte buffer with commands to DD-Booster. Waits 2ms after transmission. + */ + void sendRawBytes(const uint8_t* buffer, uint8_t length); + +public: + uint8_t _lastIndex; + SPI _device; + DigitalOut _cs; + DigitalOut _reset; +}; + +#endif //DD_BOOSTER_DDBOOSTER_H