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
Diff: main.cpp
- 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;