Library to control NeoPixel strings of RGB leds

Dependencies:   PixelArray

Dependents:   NeoPixelI2cSlave NeoPixelI2cSlave

Revision:
3:7d32f46a38d3
Parent:
2:bb9ebad05691
--- a/Effects/shift_effect.cpp	Mon Nov 23 21:32:24 2015 +0000
+++ b/Effects/shift_effect.cpp	Fri Apr 15 14:38:13 2016 +0000
@@ -3,52 +3,52 @@
 
 namespace Effects {
 
-    ShiftEffect::ShiftEffect(NeoPixelString * pixelstring, int delay_ms, neopixel::Pixel color, int groupsize)
-        : Effect(pixelstring, delay_ms) {
+    ShiftEffect::ShiftEffect(NeoPixelString * pixelstring, neopixel::Pixel color, int delay_ms, int groupsize)
+        : PeriodicEffect(pixelstring, color, delay_ms) {
     
-        this->color = color;
         this->groupsize = groupsize;
         state = FIRST_TIME;
     }
     
     void ShiftEffect::execute(void) {
-        Effect::execute();
-
-        if (state == FIRST_TIME) {
-            for (unsigned i = 0; i < getPixelString()->getLength(); i++) {
-                if (i % groupsize == 0) {
-                    getPixelString()->setPixel(i, color);
-                } else {
-                    getPixelString()->setPixel(i, Colors::Black);
-                }
-            }
-
-            state = RUNNING;
-        } else {
-
-            unsigned int i = 0;
-            neopixel::Pixel pix;
-            neopixel::Pixel first;
-
-            while (i < getPixelString()->getLength()) {
-                unsigned int group = i / groupsize;
-
-                if (i % groupsize == 0) {
-                    first = getPixelString()->getPixel(i);
+        if (shouldExecute()) {
+            clearExecute();
+            if (state == FIRST_TIME) {
+                for (unsigned i = 0; i < getPixelString()->getLength(); i++) {
+                    if (i % groupsize == 0) {
+                        getPixelString()->setPixel(i, getColor());
+                    } else {
+                        getPixelString()->setPixel(i, Colors::Black);
+                    }
                 }
 
-                if (i == ((group+1)*groupsize)-1) { // last pix in group
-                    getPixelString()->setPixel(i, first);
-                } else {
-                    pix = getPixelString()->getPixel(i+1);
-                    getPixelString()->setPixel(i, pix);
+                state = RUNNING;
+            } else {
+
+                unsigned int i = 0;
+                neopixel::Pixel pix;
+                neopixel::Pixel first;
+
+                while (i < getPixelString()->getLength()) {
+                    unsigned int group = i / groupsize;
+
+                    if (i % groupsize == 0) {
+                        first = getPixelString()->getPixel(i);
+                    }
+
+                    if (i == ((group+1)*groupsize)-1) { // last pix in group
+                        getPixelString()->setPixel(i, first);
+                    } else {
+                        pix = getPixelString()->getPixel(i+1);
+                        getPixelString()->setPixel(i, pix);
+                    }
+
+                    i++;
                 }
 
-                i++;
             }
-
+            getPixelString()->update();
         }
-        getPixelString()->update();
     }
 
 };
\ No newline at end of file