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 Heroic Robotics

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

/media/uploads/bikeNomad/img_0482.jpg

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.

Files at this revision

API Documentation at this revision

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

LPD8806.cpp Show annotated file Show diff for this revision Revisions of this file
LPD8806.h Show annotated file Show diff for this revision Revisions of this file
LedStrip.h Show annotated file Show diff for this revision Revisions of this file
--- 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