Library for the WS2812 LED Driver. Uses bit banging and nops for precise timing. Number of nops executed are configurable at run time.
Diff: WS2812.h
- Revision:
- 1:aadbf08c62a2
- Parent:
- 0:0b79cafcb387
- Child:
- 2:6e647820f587
diff -r 0b79cafcb387 -r aadbf08c62a2 WS2812.h --- a/WS2812.h Thu Feb 12 19:17:10 2015 +0000 +++ b/WS2812.h Thu Feb 12 20:20:10 2015 +0000 @@ -21,12 +21,8 @@ #include "mbed.h" -#define WS1 0x38 -#define WS0 0x30 -#define SPICLK 5000000 #define FRAME_SIZE 24 - //!Library for the WS2812 RGB LED with integrated controller /*! The WS2812 is controller that is built into a range of LEDs @@ -34,23 +30,71 @@ class WS2812 { public: - //!Creates an instance of the class. - /*! - Connect WS2812 address addr using digital pins + enum BrightnessControl { OFF, GLOBAL, PER_PIXEL }; + + /** + * Constructor + * + * @param pin Output pin. Connect to "Din" on the first WS2812 in the strip + * @param size Number of LEDs in your strip + * @param zeroHigh How many NOPs to insert to ensure TOH is properly generated. See library description for more information. + * @param zeroLow How many NOPs to insert to ensure TOL is properly generated. See library description for more information. + * @param oneHigh How many NOPs to insert to ensure T1H is properly generated. See library description for more information. + * @param oneLow How many NOPs to insert to ensure T1L is properly generated. See library description for more information. + * */ - WS2812(PinName d, int size); + WS2812(PinName pin, int size, int zeroHigh, int zeroLow, int oneHigh, int oneLow); /*! Destroys instance. */ ~WS2812(); + /** + * Sets the timing parameters for the bit-banged signal + * + * @param zeroHigh How many NOPs to insert to ensure TOH is properly generated. See library description for more information. + * @param zeroLow How many NOPs to insert to ensure TOL is properly generated. See library description for more information. + * @param oneHigh How many NOPs to insert to ensure T1H is properly generated. See library description for more information. + * @param oneLow How many NOPs to insert to ensure T1L is properly generated. See library description for more information. + * + */ void setDelays(int zeroHigh, int zeroLow, int oneHigh, int oneLow); + /** + * Sets the timing parameters for the bit-banged signal + * + * @param buf Pointer to the PixelArray buffer + * @param r_offset The offset where each each pixel pulls its red component. Wraps to beginning if end is reached. + * @param g_offset The offset where each each pixel pulls its green component. Wraps to beginning if end is reached. + * @param b_offset The offset where each each pixel pulls its blue component. Wraps to beginning if end is reached. + * + */ + void write_offsets(int buf[], int r_offset = 0, int g_offset = 0, int b_offset = 0); + + + /** + * Write the given buffer to the LED strip + * + * @param buf Pointer to the PixelArray buffer + * + */ void write(int buf[]); - void write_offsets(int buf[],int r_offset=0, int g_offset=0, int b_offset=0); - - void useII(int d); + + /** + * Sets the brightness mode + * + * @param bc The brightness control. Defaults to OFF. Possible values include OFF, GLOBAL, and PER_PIXEL + * + */ + void useII(BrightnessControl bc); + + /** + * Sets the global brightness level. + * + * @param II The brightness level. Possible values include 0 - 255 (0x00 - 0xFF). + * + */ void setII(unsigned char II); @@ -60,7 +104,7 @@ int __size; int __zeroHigh, __zeroLow, __oneHigh, __oneLow; unsigned char __II; - int __use_II; + BrightnessControl __use_II; bool *__transmitBuf; void __loadBuf(int buf[],int r_offset=0, int g_offset=0, int b_offset=0); PinName __outPin;