LineLedControl

Dependencies:   LPD8806 mbed

Fork of LPD8806_Test by Jelmer Tiete

Revision:
1:c70352e536c0
Parent:
0:005ed7611285
Child:
2:c9d9fa02a4e4
--- a/main.cpp	Fri Dec 16 03:26:01 2011 +0000
+++ b/main.cpp	Fri Dec 16 03:31:25 2011 +0000
@@ -1,175 +1,173 @@
-// Mbed library to control 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
-}
-}
-
+// 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
+    }
+}
+