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

Revision:
24:feb1dae0403a
Parent:
23:33df42ff2541
Child:
25:751c89f7e654
--- a/main.cpp	Thu Jan 02 10:30:25 2014 +0000
+++ b/main.cpp	Thu Jan 02 11:26:44 2014 +0000
@@ -1,6 +1,7 @@
 #include "mbed.h"
 #include "WS2811.h"
 #include "Colors.h"
+#include "TSISensor.h"
 
 // per LED: 3 * 20 mA = 60mA max
 // 60 LEDs: 60 * 60mA = 3600 mA max
@@ -16,6 +17,22 @@
 
 Serial pc(USBTX, USBRX);
 
+TSISensor touchSensor;
+Ticker touchTicker;
+float touchPercentage;
+float const minBrite = 0.1;
+float const maxBrite = 0.7;
+float brite;
+
+void readTouchSensor()
+{
+    touchPercentage *= 0.9;
+    touchPercentage += touchSensor.readPercentage() * 0.1;
+    brite = maxBrite * touchPercentage;
+    if (brite < minBrite)
+        brite = minBrite;
+}
+
 // @brief sets different colors in each of the LEDs of a strip
 // @param strip the light strip
 // @param sat saturation, 0.0 - 1.0
@@ -33,14 +50,23 @@
     strip.show();
 }
 
+static void showSolidColor(WS2811 &strip, uint8_t r, uint8_t g, uint8_t b)
+{
+    unsigned nLEDs = strip.numPixels();
+    for (unsigned i = 0; i < nLEDs; i++) {
+        strip.setPixelColor(i, LedStrip::Color(r, g, b));
+    }
+    strip.show();
+}
+
 int main(void)
 {
     pc.baud(115200);
     WS2811 lightStrip(nLEDs, DATA_OUT_PIN);
 
+    touchTicker.attach(&readTouchSensor, 0.1);
     lightStrip.begin();
 
-    float brite = 0.2;  // 1.0 is full brightness, which is VERY bright!
     float rainbowPeriod = 1 * 1.0e6; // usec
     float sat = 1.0;
 
@@ -49,6 +75,30 @@
     bool printed = false;
     unsigned frames = 0;
 
+    uint8_t r =0;
+    uint8_t g =0;
+    uint8_t b =0;
+    for (;;) {
+        if (r < 255)
+            r++;
+        else if (g < 255)
+            g++;
+        else if (b < 255)
+            b++;
+        else {
+            unsigned running = timeRunning.read_us();
+            pc.printf("%u frames in %u usec = %u frames / sec\r\n", frames, running, frames * 1000000 / running);
+            break;
+        }
+
+        wait(0.1);
+        showSolidColor(lightStrip, r, g, b);
+        frames++;
+    }
+
+    timeRunning.reset();
+    frames = 0;
+
     for (;;) {
         unsigned running = timeRunning.read_us();
         float hueShift = running / rainbowPeriod;