Skip to content

Commit

Permalink
fix theaterChase effect
Browse files Browse the repository at this point in the history
  • Loading branch information
hathach committed May 2, 2024
1 parent e74706e commit 066e112
Showing 1 changed file with 27 additions and 19 deletions.
46 changes: 27 additions & 19 deletions examples/strandtest_nodelay/strandtest_nodelay.ino
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ bool patternComplete = false;
int pixelInterval = 50; // Pixel Interval (ms)
int pixelQueue = 0; // Pattern Pixel Queue
int pixelCycle = 0; // Pattern Pixel Cycle
uint16_t pixelCurrent = 0; // Pattern Current Pixel Number
uint16_t pixelNumber = LED_COUNT; // Total Number of Pixels

// setup() function -- runs once at startup --------------------------------
Expand All @@ -71,7 +70,6 @@ void loop() {
patternComplete = false;
patternPrevious = currentMillis;
patternCurrent++; // Advance to next pattern
pixelCurrent = 0;
if(patternCurrent >= 7)
patternCurrent = 0;
}
Expand Down Expand Up @@ -115,13 +113,12 @@ void loop() {
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
if(pixelInterval != wait)
pixelInterval = wait; // Update delay time
strip.setPixelColor(pixelCurrent, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
pixelCurrent++; // Advance current pixel
if(pixelCurrent >= pixelNumber) { // Loop the pattern from the first LED
pixelCurrent = 0;
static uint16_t current_pixel = 0;
pixelInterval = wait; // Update delay time
strip.setPixelColor(current_pixel++, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
if(current_pixel >= pixelNumber) { // Loop the pattern from the first LED
current_pixel = 0;
patternComplete = true;
}
}
Expand All @@ -130,18 +127,29 @@ void colorWipe(uint32_t color, int wait) {
// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
// between frames.
void theaterChase(uint32_t color, int wait) {
if(pixelInterval != wait)
pixelInterval = wait; // Update delay time
for(int i = 0; i < pixelNumber; i++) {
strip.setPixelColor(i + pixelQueue, color); // Set pixel's color (in RAM)
static uint32_t loop_count = 0;
static uint16_t current_pixel = 0;

pixelInterval = wait; // Update delay time

strip.clear();

for(int c=current_pixel; c < pixelNumber; c += 3) {
strip.setPixelColor(c, color);
}
strip.show(); // Update strip to match
for(int i=0; i < pixelNumber; i+=3) {
strip.setPixelColor(i + pixelQueue, strip.Color(0, 0, 0)); // Set pixel's color (in RAM)
strip.show();

current_pixel++;
if (current_pixel >= 3) {
current_pixel = 0;
loop_count++;
}

if (loop_count >= 10) {
current_pixel = 0;
loop_count = 0;
patternComplete = true;
}
pixelQueue++; // Advance current pixel
if(pixelQueue >= 3)
pixelQueue = 0; // Loop the pattern from the first LED
}

// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
Expand Down

0 comments on commit 066e112

Please sign in to comment.