Library to control NeoPixel strings of RGB leds

Dependencies:   PixelArray

Dependents:   NeoPixelI2cSlave NeoPixelI2cSlave

Committer:
dwini
Date:
Mon Nov 23 21:32:24 2015 +0000
Revision:
2:bb9ebad05691
Child:
3:7d32f46a38d3
Add shift effect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dwini 2:bb9ebad05691 1 #include "shift_effect.h"
dwini 2:bb9ebad05691 2 #include "colors.h"
dwini 2:bb9ebad05691 3
dwini 2:bb9ebad05691 4 namespace Effects {
dwini 2:bb9ebad05691 5
dwini 2:bb9ebad05691 6 ShiftEffect::ShiftEffect(NeoPixelString * pixelstring, int delay_ms, neopixel::Pixel color, int groupsize)
dwini 2:bb9ebad05691 7 : Effect(pixelstring, delay_ms) {
dwini 2:bb9ebad05691 8
dwini 2:bb9ebad05691 9 this->color = color;
dwini 2:bb9ebad05691 10 this->groupsize = groupsize;
dwini 2:bb9ebad05691 11 state = FIRST_TIME;
dwini 2:bb9ebad05691 12 }
dwini 2:bb9ebad05691 13
dwini 2:bb9ebad05691 14 void ShiftEffect::execute(void) {
dwini 2:bb9ebad05691 15 Effect::execute();
dwini 2:bb9ebad05691 16
dwini 2:bb9ebad05691 17 if (state == FIRST_TIME) {
dwini 2:bb9ebad05691 18 for (unsigned i = 0; i < getPixelString()->getLength(); i++) {
dwini 2:bb9ebad05691 19 if (i % groupsize == 0) {
dwini 2:bb9ebad05691 20 getPixelString()->setPixel(i, color);
dwini 2:bb9ebad05691 21 } else {
dwini 2:bb9ebad05691 22 getPixelString()->setPixel(i, Colors::Black);
dwini 2:bb9ebad05691 23 }
dwini 2:bb9ebad05691 24 }
dwini 2:bb9ebad05691 25
dwini 2:bb9ebad05691 26 state = RUNNING;
dwini 2:bb9ebad05691 27 } else {
dwini 2:bb9ebad05691 28
dwini 2:bb9ebad05691 29 unsigned int i = 0;
dwini 2:bb9ebad05691 30 neopixel::Pixel pix;
dwini 2:bb9ebad05691 31 neopixel::Pixel first;
dwini 2:bb9ebad05691 32
dwini 2:bb9ebad05691 33 while (i < getPixelString()->getLength()) {
dwini 2:bb9ebad05691 34 unsigned int group = i / groupsize;
dwini 2:bb9ebad05691 35
dwini 2:bb9ebad05691 36 if (i % groupsize == 0) {
dwini 2:bb9ebad05691 37 first = getPixelString()->getPixel(i);
dwini 2:bb9ebad05691 38 }
dwini 2:bb9ebad05691 39
dwini 2:bb9ebad05691 40 if (i == ((group+1)*groupsize)-1) { // last pix in group
dwini 2:bb9ebad05691 41 getPixelString()->setPixel(i, first);
dwini 2:bb9ebad05691 42 } else {
dwini 2:bb9ebad05691 43 pix = getPixelString()->getPixel(i+1);
dwini 2:bb9ebad05691 44 getPixelString()->setPixel(i, pix);
dwini 2:bb9ebad05691 45 }
dwini 2:bb9ebad05691 46
dwini 2:bb9ebad05691 47 i++;
dwini 2:bb9ebad05691 48 }
dwini 2:bb9ebad05691 49
dwini 2:bb9ebad05691 50 }
dwini 2:bb9ebad05691 51 getPixelString()->update();
dwini 2:bb9ebad05691 52 }
dwini 2:bb9ebad05691 53
dwini 2:bb9ebad05691 54 };