Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LPD8806_Test by
main.cpp
- Committer:
- ehbmbed2
- Date:
- 2011-12-16
- Revision:
- 1:c70352e536c0
- Parent:
- 0:005ed7611285
- Child:
- 2:c9d9fa02a4e4
File content as of revision 1:c70352e536c0:
// Mbed program to test LPD8806-based RGB LED Strips // (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 /*****************************************************************************/ #include "LPD8806.h" LPD8806 strip = LPD8806(5); // Chase a dot down the strip // good for testing purposes void colorChase(uint32_t c, uint8_t delay) { int i; for (i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, 0); // turn all pixels off } for (i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, c); if (i == 0) { strip.setPixelColor(strip.numPixels()-1, 0); } else { strip.setPixelColor(i-1, 0); } strip.show(); wait_ms(delay); } } // fill the dots one after the other with said color // good for testing purposes void colorWipe(uint32_t c, uint8_t delay) { int i; for (i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); wait_ms(delay); } } //Input a value 0 to 384 to get a color value. //The colours are a transition r - g -b - back to r uint32_t Wheel(uint16_t WheelPos) { uint8_t b=0; uint8_t g=0; uint8_t r = 0; switch (WheelPos / 128) { case 0: r = 127 - WheelPos % 128; //Red down g = WheelPos % 128; // Green up b = 0; //blue off break; case 1: g = 127 - WheelPos % 128; //green down b = WheelPos % 128; //blue up r = 0; //red off break; case 2: b = 127 - WheelPos % 128; //blue down r = WheelPos % 128; //red up g = 0; //green off break; } return(strip.Color(r,g,b)); } void rainbow(uint8_t delay) { int i, j; for (j=0; j < 384; j++) { // 3 cycles of all 384 colors in the wheel for (i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, Wheel( (i + j) % 384)); } strip.show(); // write all the pixels out wait_ms(delay); } } // Slightly different, this one makes the rainbow wheel equally distributed // along the chain void rainbowCycle(uint8_t delay) { uint16_t i, j; for (j=0; j < 384 * 5; j++) { // 5 cycles of all 384 colors in the wheel for (i=0; i < strip.numPixels(); i++) { // tricky math! we use each pixel as a fraction of the full 384-color wheel // (thats the i / strip.numPixels() part) // Then add in j which makes the colors go around per pixel // the % 384 is to make the wheel cycle around strip.setPixelColor(i, Wheel( ((i * 384 / strip.numPixels()) + j) % 384) ); } strip.show(); // write all the pixels out wait_ms(delay); } } // "Larson scanner" = Cylon/KITT bouncing light effect void scanner(uint8_t r, uint8_t g, uint8_t b, uint8_t delay) { int i, j, pos, dir; pos = 0; dir = 1; for (i=0; i<((strip.numPixels()-1) * 8); i++) { // Draw 5 pixels centered on pos. setPixelColor() will clip // any pixels off the ends of the strip, no worries there. // we'll make the colors dimmer at the edges for a nice pulse // look strip.setPixelColor(pos - 2, strip.Color(r/4, g/4, b/4)); strip.setPixelColor(pos - 1, strip.Color(r/2, g/2, b/2)); strip.setPixelColor(pos, strip.Color(r, g, b)); strip.setPixelColor(pos + 1, strip.Color(r/2, g/2, b/2)); strip.setPixelColor(pos + 2, strip.Color(r/4, g/4, b/4)); strip.show(); wait_ms(delay); // If we wanted to be sneaky we could erase just the tail end // pixel, but it's much easier just to erase the whole thing // and draw a new one next time. for (j=-2; j<= 2; j++) strip.setPixelColor(pos+j, strip.Color(0,0,0)); // Bounce off ends of strip pos += dir; if (pos < 0) { pos = 1; dir = -dir; } else if (pos >= strip.numPixels()) { pos = strip.numPixels() - 2; dir = -dir; } } } int main() { // Start up the LED strip strip.begin(); // Update the strip, to start they are all 'off' strip.show(); while (1) { colorChase(strip.Color(127,127,127), 100); // Send a simple pixel chase in... colorChase(strip.Color(127,0,0), 100); // full brightness red colorChase(strip.Color(127,127,0), 100); // orange colorChase(strip.Color(0,127,0), 100); // green colorChase(strip.Color(0,127,127), 100); // teal colorChase(strip.Color(0,0,127), 100); // blue colorChase(strip.Color(127,0,127), 100); // violet // fill the entire strip with... colorWipe(strip.Color(127,0,0), 100); // red colorWipe(strip.Color(0, 127,0), 100); // green colorWipe(strip.Color(0,0,127), 100); // blue rainbow(10); rainbowCycle(5); // make it go through the cycle fairly fast // Back-and-forth lights scanner(127,0,0, 50); // red, slow scanner(0,0,127, 5); // blue, fast } }