WS2812 LED driver
Dependents: WS2812-Example WS2812-Example WS2812-Example
WS2812.h@0:f1e39d76fbca, 2015-11-18 (annotated)
- Committer:
- fastestoffer
- Date:
- Wed Nov 18 14:00:44 2015 +0000
- Revision:
- 0:f1e39d76fbca
Initial commit of WS2812 LED driver
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fastestoffer | 0:f1e39d76fbca | 1 | #include "mbed.h" |
fastestoffer | 0:f1e39d76fbca | 2 | |
fastestoffer | 0:f1e39d76fbca | 3 | #ifndef WS2812_H |
fastestoffer | 0:f1e39d76fbca | 4 | #define WS2812_H |
fastestoffer | 0:f1e39d76fbca | 5 | |
fastestoffer | 0:f1e39d76fbca | 6 | #define WS2812_LED_NUM_LEDS 30 |
fastestoffer | 0:f1e39d76fbca | 7 | #define WS2812_LED_NUM_RESET_BYTES 3 |
fastestoffer | 0:f1e39d76fbca | 8 | |
fastestoffer | 0:f1e39d76fbca | 9 | typedef struct |
fastestoffer | 0:f1e39d76fbca | 10 | { |
fastestoffer | 0:f1e39d76fbca | 11 | uint8_t r; |
fastestoffer | 0:f1e39d76fbca | 12 | uint8_t g; |
fastestoffer | 0:f1e39d76fbca | 13 | uint8_t b; |
fastestoffer | 0:f1e39d76fbca | 14 | } Color; |
fastestoffer | 0:f1e39d76fbca | 15 | |
fastestoffer | 0:f1e39d76fbca | 16 | class WS2812 { |
fastestoffer | 0:f1e39d76fbca | 17 | public: |
fastestoffer | 0:f1e39d76fbca | 18 | WS2812(SPI &spi, event_callback_t led_update_strip_finished); |
fastestoffer | 0:f1e39d76fbca | 19 | |
fastestoffer | 0:f1e39d76fbca | 20 | void update_strip(); |
fastestoffer | 0:f1e39d76fbca | 21 | void set_led(int led_number, Color *c); |
fastestoffer | 0:f1e39d76fbca | 22 | void set_all(Color *c); |
fastestoffer | 0:f1e39d76fbca | 23 | |
fastestoffer | 0:f1e39d76fbca | 24 | private: |
fastestoffer | 0:f1e39d76fbca | 25 | SPI _spi; |
fastestoffer | 0:f1e39d76fbca | 26 | int _led_data_size; |
fastestoffer | 0:f1e39d76fbca | 27 | event_callback_t _led_update_strip_finished; |
fastestoffer | 0:f1e39d76fbca | 28 | |
fastestoffer | 0:f1e39d76fbca | 29 | void _write_color_to_memory(uint8_t* tuple, uint8_t color_value); |
fastestoffer | 0:f1e39d76fbca | 30 | |
fastestoffer | 0:f1e39d76fbca | 31 | // Each sent bit to the LED strip is represented by 4 bits in memory. |
fastestoffer | 0:f1e39d76fbca | 32 | // Each LED requires 24 bits (8 bits per color). |
fastestoffer | 0:f1e39d76fbca | 33 | // In addition, we need to allocate room to send enough zeros so that the strip latches |
fastestoffer | 0:f1e39d76fbca | 34 | uint8_t _led_data[WS2812_LED_NUM_LEDS*12 + WS2812_LED_NUM_RESET_BYTES]; |
fastestoffer | 0:f1e39d76fbca | 35 | }; |
fastestoffer | 0:f1e39d76fbca | 36 | |
fastestoffer | 0:f1e39d76fbca | 37 | #endif |