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 27:88c2abdf5eb9, committed 2014-01-03
- Comitter:
- bikeNomad
- Date:
- Fri Jan 03 15:45:56 2014 +0000
- Parent:
- 26:ac5d0e18c7b6
- Child:
- 28:dbe551a3dd64
- Commit message:
- made rainbows change with accelerometer.
Changed in this revision
| MMA8451Q.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA8451Q.lib Fri Jan 03 15:45:56 2014 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
--- 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 ++;
Ned Konz


Generic WS2811/WS2812