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:
Fri Jan 03 19:17:24 2014 +0000
Parent:
28:dbe551a3dd64
Child:
30:52e9205a8059
Commit message:
fixed bit timing to eliminate flickering.

Changed in this revision

WS2811.cpp 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.cpp	Fri Jan 03 16:12:56 2014 +0000
+++ b/WS2811.cpp	Fri Jan 03 19:17:24 2014 +0000
@@ -51,8 +51,8 @@
 #define NSEC_TO_TICKS(nsec) ((nsec)*48/1000)
 static const uint32_t CLK_NSEC = 1250;
 static const uint32_t tpm_period    = NSEC_TO_TICKS(CLK_NSEC);
-static const uint32_t tpm_p0_period = NSEC_TO_TICKS(350);
-static const uint32_t tpm_p1_period = NSEC_TO_TICKS(700);
+static const uint32_t tpm_p0_period = NSEC_TO_TICKS(250);
+static const uint32_t tpm_p1_period = NSEC_TO_TICKS(650);
 
 enum DMA_MUX_SRC {
     DMA_MUX_SRC_TPM0_CH_0     = 24,
--- a/main.cpp	Fri Jan 03 16:12:56 2014 +0000
+++ b/main.cpp	Fri Jan 03 19:17:24 2014 +0000
@@ -25,8 +25,9 @@
 
 TSISensor touchSensor;
 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
+PwmOut rled(LED_RED);
+PwmOut gled(LED_GREEN);
 
-Ticker touchTicker;
 float touchPercentage;
 unsigned frames;
 
@@ -73,14 +74,14 @@
     WS2811 lightStrip1(nLEDs, DATA_OUT_PIN1);
     WS2811 lightStrip2(nLEDs, DATA_OUT_PIN2);
 
-    touchTicker.attach(&readTouchSensor, 0.1);
     lightStrip1.begin();
     lightStrip2.begin();
+    rled = 1.0;
+    gled = 1.0;
 
     float sat = 1.0;
 
     timeRunning.start();
-    bool printed = false;
 
     uint8_t r =0;
     uint8_t g =0;
@@ -109,17 +110,17 @@
     timeRunning.reset();
     frames = 0;
 
+    float xyz[3];
+    acc.getAccAllAxis(xyz);
+    pc.printf("x: %f y: %f z: %f\r\n", xyz[0], xyz[1], xyz[2]);
+
     for (;;) {
-        unsigned running = timeRunning.read_us();
-        // 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;
-        }
-        float xyz[3];
         acc.getAccAllAxis(xyz);
-        showRainbow(lightStrip1, sat, brite, xyz[0]);
-        showRainbow(lightStrip2, sat, brite, xyz[1]);
+        rled = 1.0 - abs(xyz[0]);
+        gled = 1.0 - abs(xyz[1]);
+        readTouchSensor();
+        showRainbow(lightStrip1, sat, brite, abs(xyz[0]));
+        showRainbow(lightStrip2, sat, brite, abs(xyz[1]));
         WS2811::startDMA();
 
         frames ++;