Test program for my Multi_WS2811 library that started out as a fork of heroic/WS2811. My library uses hardware DMA on the FRDM-KL25Z to drive up to 16 strings of WS2811 or WS2812 LEDs in parallel.
Dependencies: Multi_WS2811 mbed MMA8451Q
Fork of WS2811 by
NOTE: I have accidentally pushed changes for another fork of this program that I used in the recent Georgetown Carnival Power Tool Races. When I get some time, I will restore the test program to its original glory.
You can see my power tool racer (Nevermore's Revenge) here
This tests my FRDM-KL25Z multi-string WS2811/WS2812 library. It uses the accelerometer to change the rainbow phase on two strings of LEDs as well as the touch sense to change brightness.
A video of this program in operation is here.
Here is the library that I developed to run the LEDs:
Import libraryMulti_WS2811
Library allowing up to 16 strings of 60 WS2811 or WS2812 LEDs to be driven from a single FRDM-KL25Z board. Uses hardware DMA to do a full 800 KHz rate without much CPU burden.
Revision 4:0b75eb84a6d2, committed 2012-10-05
- Comitter:
- heroic
- Date:
- Fri Oct 05 05:41:39 2012 +0000
- Parent:
- 3:a415f73507c9
- Child:
- 5:70ded6500cd3
- Commit message:
- Change to use virtual base class
Changed in this revision
--- a/LPD8806.cpp Mon Oct 01 02:30:12 2012 +0000 +++ b/LPD8806.cpp Fri Oct 05 05:41:39 2012 +0000 @@ -9,6 +9,7 @@ // Jas Strong <jasmine@electronpusher.org> /*****************************************************************************/ +#include "LedStrip.h" #include "LPD8806.h" LPD8806::LPD8806(PinName dataPin, PinName clockPin, int n) :
--- a/LPD8806.h Mon Oct 01 02:30:12 2012 +0000 +++ b/LPD8806.h Fri Oct 05 05:41:39 2012 +0000 @@ -5,44 +5,38 @@ // and their strips: http://www.adafruit.com/products/306 // Released under the MIT License: http://mbed.org/license/mit // -// standard connected to 1st hardware SPI -// LPD8806 <> MBED -// DATA -> P5 -// CLOCK -> p7 /*****************************************************************************/ +// Heavily modified by Jas Strong, 2012-10-04 +// Changed to use a virtual base class and to use software SPI. + #include "mbed.h" +#include "LedStrip.h" #ifndef MBED_LPD8806_H #define MBED_LPD8806_H -class LPD8806 { +class LPD8806 : public LedStrip { public: LPD8806(PinName dataPin, PinName clockPin, int n); - void - begin(void), - show(void), - blank(void), - setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b), - setPixelB(uint16_t n, uint8_t b), - setPixelG(uint16_t n, uint8_t g), - setPixelR(uint16_t n, uint8_t r), - - setPixelColor(uint16_t n, uint32_t c); - uint16_t - numPixels(void); - uint32_t - Color(uint8_t, uint8_t, uint8_t); + virtual void begin(void); + virtual void show(void); + virtual void blank(void); + virtual void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b); + virtual void setPixelB(uint16_t n, uint8_t b); + virtual void setPixelG(uint16_t n, uint8_t g); + virtual void setPixelR(uint16_t n, uint8_t r); + virtual void setPixelColor(uint16_t n, uint32_t c); + virtual uint16_t numPixels(void); + virtual uint32_t Color(uint8_t, uint8_t, uint8_t); private: DigitalOut dat; DigitalOut clk; void write(uint8_t byte); - uint8_t - *pixels; // Holds LED color values - uint16_t - numLEDs; // Number of RGB LEDs in strand + uint8_t *pixels; // Holds LED color values + uint16_t numLEDs; // Number of RGB LEDs in strand void writezeros(uint16_t n);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LedStrip.h Fri Oct 05 05:41:39 2012 +0000 @@ -0,0 +1,28 @@ +// Parent class for all addressable LED strips. +// Partially based on work by and (c) 2011 Jelmer Tiete +// whose library is ported from the Arduino implementation of Adafruit Industries +// found at: http://github.com/adafruit/LPD8806 +// and their strips: http://www.adafruit.com/products/306 +// Released under the MIT License: http://mbed.org/license/mit + +// This is a pure virtual parent class for all LED strips, so that different types +// of strip may be used in a single array or container. + +#include "mbed.h" +#ifndef LEDSTRIP_H +#define LEDSTRIP_H + +class LedStrip { + public: + virtual void begin(void)=0; + virtual void show(void)=0; + virtual void blank(void)=0; + virtual void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)=0; + virtual void setPixelB(uint16_t n, uint8_t b)=0; + virtual void setPixelG(uint16_t n, uint8_t g)=0; + virtual void setPixelR(uint16_t n, uint8_t r)=0; + virtual void setPixelColor(uint16_t n, uint32_t c)=0; + virtual uint16_t numPixels(void)=0; + virtual uint32_t Color(uint8_t, uint8_t, uint8_t)=0; +}; +#endif \ No newline at end of file