Library to control NeoPixel strings of RGB leds
Dependents: NeoPixelI2cSlave NeoPixelI2cSlave
Diff: Effects/shift_effect.cpp
- 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