Simple 8x8 LED Matrix controller which interfaces with a Processing GUI over serial to display sketches

Dependencies:   Multi_WS2811 mbed

Fork of Multi_WS2811_test by Ned Konz

Files at this revision

API Documentation at this revision

Comitter:
bikeNomad
Date:
Thu Jan 02 02:31:24 2014 +0000
Parent:
21:4541da183397
Child:
23:33df42ff2541
Commit message:
Changed to 60 LEDs maximum. Reduced brightness.

Changed in this revision

WS2811.h 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
--- a/WS2811.h	Thu Jan 02 00:50:09 2014 +0000
+++ b/WS2811.h	Thu Jan 02 02:31:24 2014 +0000
@@ -1,58 +1,58 @@
-// Mbed library to control WS2801-based RGB LED Strips
-// some portions (c) 2011 Jelmer Tiete
-// This 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
-//
-/*****************************************************************************/
-
-// Heavily modified by Jas Strong, 2012-10-04
-// Changed to use a virtual base class and to use software SPI.
-//
-// Modified by Ned Konz, December 2013.
-// Using three-phase DMA ala Paul Stoffegren's version.
-
-#ifndef MBED_WS2811_H
-#define MBED_WS2811_H
-
-#include "mbed.h"
-#include "LedStrip.h"
-
-#define MAX_LEDS_PER_STRIP 40
-
-class WS2811 : public LedStrip
-{
-public:
-    WS2811(unsigned n, unsigned pinNumber);
-
-    virtual void begin();
-    virtual void show();
-    virtual void blank();
-
-private:
-    Timer guardtime;
-    uint32_t pinMask;
-
-    void writePixel(unsigned n, uint8_t *p);
-
-    // Class Static:
-
-    static bool initialized;
-    static uint32_t enabledPins;
-
-    static void writeByte(uint8_t byte, uint32_t mask, uint32_t *dest);
-    static void startDMA();
-
-    static bool is_dma_done();
-
-    static void hw_init();
-        static void io_init();
-        static void clock_init();
-        static void dma_init();
-        static void tpm_init();
-        static void dma_data_init();
-};
-
-#endif
+// Mbed library to control WS2801-based RGB LED Strips
+// some portions (c) 2011 Jelmer Tiete
+// This 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
+//
+/*****************************************************************************/
+
+// Heavily modified by Jas Strong, 2012-10-04
+// Changed to use a virtual base class and to use software SPI.
+//
+// Modified by Ned Konz, December 2013.
+// Using three-phase DMA ala Paul Stoffegren's version.
+
+#ifndef MBED_WS2811_H
+#define MBED_WS2811_H
+
+#include "mbed.h"
+#include "LedStrip.h"
+
+#define MAX_LEDS_PER_STRIP 60
+
+class WS2811 : public LedStrip
+{
+public:
+    WS2811(unsigned n, unsigned pinNumber);
 
+    virtual void begin();
+    virtual void show();
+    virtual void blank();
+
+private:
+    Timer guardtime;
+    uint32_t pinMask;
+
+    void writePixel(unsigned n, uint8_t *p);
+
+    // Class Static:
+
+    static bool initialized;
+    static uint32_t enabledPins;
+
+    static void writeByte(uint8_t byte, uint32_t mask, uint32_t *dest);
+    static void startDMA();
+
+    static bool is_dma_done();
+
+    static void hw_init();
+        static void io_init();
+        static void clock_init();
+        static void dma_init();
+        static void tpm_init();
+        static void dma_data_init();
+};
+
+#endif
+
--- a/main.cpp	Thu Jan 02 00:50:09 2014 +0000
+++ b/main.cpp	Thu Jan 02 02:31:24 2014 +0000
@@ -1,74 +1,74 @@
-#include "mbed.h"
-#include "WS2811.h"
-#include "Colors.h"
-
-// per LED: 3x 20 mA = 60mA
-// 4x full brightness = 0.33A at 5V.
-unsigned const nLEDs = 40;
-
-// I/O pin usage
-// PTD0 TPM0 CH0 monitor
-// PTD1 TPM0 CH1 monitor
-// PTD2 data output
-// PTD3 debug output
-
-unsigned const DATA_OUT_PIN = 2; // PTD2
-
-Serial pc(USBTX, USBRX);
-
-// @brief sets different colors in each of the LEDs of a strip
-// @param strip the light strip
-// @param sat saturation, 0.0 - 1.0
-// @param brite brightness, 0.0 - 1.0
-// @param hueShift shift, 0.0 - 1.0 is equivalent to 0 - 360 degrees
-void showRainbow(WS2811 &strip, float sat, float brite, float hueShift)
-{
-    unsigned nLEDs = strip.numPixels();
-    for (unsigned i = 0; i < nLEDs; i++) {
-        uint8_t r, g, b;
-        float hue = ((float)i / (float)nLEDs) + hueShift;
-        HSBtoRGB(hue, sat, brite, &r, &g, &b);
-        strip.setPixelColor(i, LedStrip::Color(r, g, b));
-    }
-    strip.show();
-}
-
-void showTestPattern(WS2811 &strip)
-{
-    unsigned nLEDs = strip.numPixels();
-    for (unsigned i = 0; i < nLEDs; i++)
-    {
-        strip.setPixelColor(i, LedStrip::Color(0xff,0,0xAA));
-    }
-    strip.show();
-}
-
-int main(void)
-{
-    pc.baud(115200);
-    pc.printf("\r\nLEDs: %d\r\n", nLEDs);
-
-    WS2811 lightStrip(nLEDs, DATA_OUT_PIN);
-    Timer advance;
-    advance.start();
-
-    lightStrip.begin();
-
-    // time per LED is about 44 usec, with 310 usec gap between.
-    float sat = 1.0;
-    float brite = 0.25;
-    float hueShift = 0.0;
-    float hueShiftIncrement = 1.0 / (360.0 / nLEDs);
-
-    for (;;) {
-        advance.reset();
-
-        // showTestPattern(lightStrip);
-        showRainbow(lightStrip, sat, brite, hueShift);
-        hueShift += hueShiftIncrement;
-
-        while (advance.read_ms() < 100)
-            __NOP();
-   }
-}
+#include "mbed.h"
+#include "WS2811.h"
+#include "Colors.h"
+
+// per LED: 3x 20 mA = 60mA
+// 4x full brightness = 0.33A at 5V.
+unsigned const nLEDs = MAX_LEDS_PER_STRIP;
+
+// I/O pin usage
+// PTD0 TPM0 CH0 monitor
+// PTD1 TPM0 CH1 monitor
+// PTD2 data output
+// PTD3 debug output
+
+unsigned const DATA_OUT_PIN = 2; // PTD2
+
+Serial pc(USBTX, USBRX);
+
+// @brief sets different colors in each of the LEDs of a strip
+// @param strip the light strip
+// @param sat saturation, 0.0 - 1.0
+// @param brite brightness, 0.0 - 1.0
+// @param hueShift shift, 0.0 - 1.0 is equivalent to 0 - 360 degrees
+static void showRainbow(WS2811 &strip, float sat, float brite, float hueShift)
+{
+    unsigned nLEDs = strip.numPixels();
+    for (unsigned i = 0; i < nLEDs; i++) {
+        uint8_t r, g, b;
+        float hue = ((float)i / (float)nLEDs) + hueShift;
+        HSBtoRGB(hue, sat, brite, &r, &g, &b);
+        strip.setPixelColor(i, LedStrip::Color(r, g, b));
+    }
+    strip.show();
+}
 
+static void showTestPattern(WS2811 &strip)
+{
+    unsigned nLEDs = strip.numPixels();
+    for (unsigned i = 0; i < nLEDs; i++)
+    {
+        strip.setPixelColor(i, LedStrip::Color(0xff,0,0xAA));
+    }
+    strip.show();
+}
+
+int main(void)
+{
+    pc.baud(115200);
+    pc.printf("\r\nLEDs: %d\r\n", nLEDs);
+
+    WS2811 lightStrip(nLEDs, DATA_OUT_PIN);
+
+    lightStrip.begin();
+
+    float sat = 1.0;    // color saturation, 0.0 to 1.0
+    float brite = 0.1;  // 1.0 is full brightness, which is VERY bright!
+    float hueShift = 0.0;
+    float hueShiftIncrement = 1.0 / (360.0 / nLEDs);
+
+    Timer advance;
+    advance.start();
+
+    for (;;) {
+        advance.reset();
+
+        // showTestPattern(lightStrip);
+        showRainbow(lightStrip, sat, brite, hueShift);
+        hueShift += hueShiftIncrement;
+
+        while (advance.read_ms() < 100)
+            __NOP();
+   }
+}
+