Library to control NeoPixel strings of RGB leds

Dependencies:   PixelArray

Dependents:   NeoPixelI2cSlave NeoPixelI2cSlave

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers shift_effect.cpp Source File

shift_effect.cpp

00001 #include "shift_effect.h"
00002 #include "colors.h"
00003 
00004 namespace Effects {
00005 
00006     ShiftEffect::ShiftEffect(NeoPixelString * pixelstring, neopixel::Pixel color, int delay_ms, int groupsize)
00007         : PeriodicEffect(pixelstring, color, delay_ms) {
00008     
00009         this->groupsize = groupsize;
00010         state = FIRST_TIME;
00011     }
00012     
00013     void ShiftEffect::execute(void) {
00014         if (shouldExecute()) {
00015             clearExecute();
00016             if (state == FIRST_TIME) {
00017                 for (unsigned i = 0; i < getPixelString()->getLength(); i++) {
00018                     if (i % groupsize == 0) {
00019                         getPixelString()->setPixel(i, getColor());
00020                     } else {
00021                         getPixelString()->setPixel(i, Colors::Black);
00022                     }
00023                 }
00024 
00025                 state = RUNNING;
00026             } else {
00027 
00028                 unsigned int i = 0;
00029                 neopixel::Pixel pix;
00030                 neopixel::Pixel first;
00031 
00032                 while (i < getPixelString()->getLength()) {
00033                     unsigned int group = i / groupsize;
00034 
00035                     if (i % groupsize == 0) {
00036                         first = getPixelString()->getPixel(i);
00037                     }
00038 
00039                     if (i == ((group+1)*groupsize)-1) { // last pix in group
00040                         getPixelString()->setPixel(i, first);
00041                     } else {
00042                         pix = getPixelString()->getPixel(i+1);
00043                         getPixelString()->setPixel(i, pix);
00044                     }
00045 
00046                     i++;
00047                 }
00048 
00049             }
00050             getPixelString()->update();
00051         }
00052     }
00053 
00054 };