WS2812 LED driver

Dependents:   WS2812-Example WS2812-Example WS2812-Example

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?

UserRevisionLine numberNew 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