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 11:26:44 2014 +0000
Parent:
23:33df42ff2541
Child:
25:751c89f7e654
Commit message:
added R/G/B test at start; 50usec guardtime doesn't work for some reason.

Changed in this revision

TSI.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/TSI.lib	Thu Jan 02 11:26:44 2014 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/TSI/#1a60ef257879
--- 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;