![](/media/cache/profiles/655ea4bd3b5736d88afc30c9212ccddf.50x50_q85.jpg)
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.
Diff: main.cpp
- Revision:
- 27:88c2abdf5eb9
- Parent:
- 25:751c89f7e654
- Child:
- 28:dbe551a3dd64
--- a/main.cpp Thu Jan 02 19:44:43 2014 +0000 +++ b/main.cpp Fri Jan 03 15:45:56 2014 +0000 @@ -2,6 +2,9 @@ #include "WS2811.h" #include "Colors.h" #include "TSISensor.h" +#include "MMA8451Q.h" + +#define MMA8451_I2C_ADDRESS (0x1d<<1) // per LED: 3 * 20 mA = 60mA max // 60 LEDs: 60 * 60mA = 3600 mA max @@ -21,6 +24,8 @@ Timer timeRunning; TSISensor touchSensor; +MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); + Ticker touchTicker; float touchPercentage; unsigned frames; @@ -107,13 +112,15 @@ for (;;) { unsigned running = timeRunning.read_us(); - float hueShift = running / rainbowPeriod; + // float hueShift = running / rainbowPeriod; if (!printed && running >= 10000000U) { pc.printf("%u frames in %u usec = %u frames / sec\r\n", frames, running, frames * 1000000 / running); printed = true; } - showRainbow(lightStrip1, sat, brite, hueShift); - showRainbow(lightStrip2, sat, brite, hueShift + 0.5); + float xyz[3]; + acc.getAccAllAxis(xyz); + showRainbow(lightStrip1, sat, brite, xyz[0]); + showRainbow(lightStrip2, sat, brite, xyz[1]); WS2811::startDMA(); frames ++;