Julio G / Mbed 2 deprecated LedStrip

Dependencies:   mbed

Fork of LedStrip_test by Balazs Racz

Revision:
1:1a0d5a780e57
Parent:
0:109a7a5e3e6e
Child:
2:590e99f4a313
--- a/main.cpp	Sat Sep 21 13:07:11 2013 +0000
+++ b/main.cpp	Sat Sep 21 15:21:53 2013 +0000
@@ -10,6 +10,8 @@
 DigitalOut latch(p16);
 DigitalOut strobe(p17);
 
+#define LENGTH 160
+
 uint8_t strip[160];
 
 #define BLACK 0x80
@@ -105,6 +107,43 @@
     bool fast_;
 };
 
+class WalkingFadeInOut : public Schedulable {
+public:
+    WalkingFadeInOut(int start_time, int led, int stride, uint8_t a, uint8_t b, bool fast)
+        : led_(led - stride), stride_(stride), a_(a), b_(b), fast_(fast), step_(true) {
+        time_ = start_time;
+        Schedule(this);
+    }  
+
+    virtual void Run() {
+        if (step_) {
+            step_ = false;
+            if (led_ >= 0) strip[led_] = a_;
+            led_ += stride_;
+            led_ %= LENGTH;
+        } else {
+            step_ = true;
+        }
+        strip[led_] = getcolor(a_, b_);        
+        if (fast_) {
+            strip[led_] |= 0x40;
+            time_ += 128;
+        } else {
+            time_ += 256;
+        }
+        strip_changed = true;
+        swap(a_,b_);
+        Schedule(this);
+    }
+
+private:
+    int led_, stride_;
+    uint8_t a_,b_;
+    bool fast_, step_;
+    
+};
+
+
 int main() {
     Ticker t;
     pc.baud(115200);
@@ -118,13 +157,18 @@
     myled = 1;
     memset(strip, 0x80, sizeof(strip));
     write_strip(strip, sizeof(strip));
-    t.attach(&tick_cb, 1.0/400);
+    t.attach(&tick_cb, 1.0/1000);
     
     memset(strip, 0x0, sizeof(strip));
     
-    new RepeatedFadeInOut(0, 0, BLACK, RED, false);
+    /*new RepeatedFadeInOut(0, 0, BLACK, RED, false);
     new RepeatedFadeInOut(171, 1, BLACK, RED, false);
     new RepeatedFadeInOut(341, 2, BLACK, RED, false);
+*/
+    int stride = 7;
+    for (int i = 0; i < stride; i++) {
+        new WalkingFadeInOut((256 * i / stride), i, stride, BLACK, GREEN, true);
+    }
     
     while(1) {
         while (task_list.empty() || global_tick < task_list.top()->time_) {
@@ -143,7 +187,7 @@
     strip[2] = BLUE;
     strip[3] = getcolor(BLACK, RED);
 
-    write_strip(strip, sizeof(strip));
+    (strip, sizeof(strip));
 
     myled = 1;
     int count = 0;