Hi, last year with the help of some wonderful people on this forum, I was able to write this code that addresses LEDs individually. It works great! Now I'm trying to write other code based on it and realized I don't fully understand it.
#include <FastLED.h>
#define NUM_LEDS 120
#define DATA_PIN 5
#define CLOCK_PIN 6
CRGB DOT[NUM_LEDS];
unsigned long previousMillis[NUM_LEDS] = {};
byte indexes[NUM_LEDS] = {0};
const byte MAX_NUM_OF_PERIODS =5;
long COLOR[][MAX_NUM_OF_PERIODS] =
{
{0xFFFF00, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0xFF007F, 0x000000, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0xFF007F, 0x000000, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0xFF007F, 0x000000, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
{0x000000, 0x000000, 0x000000, 0xFF007F, -1},
};
int FR = 150;
void setup() {
FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, BGR> (DOT, NUM_LEDS);
FastLED.setBrightness(10);
}
void loop() {
unsigned long currentMillis = millis();
for(int LED = 0; LED < NUM_LEDS; LED++) {
if(currentMillis - previousMillis[LED] >= FR) {
DOT[LED] = COLOR[LED][indexes[LED]];
FastLED.show();
previousMillis[LED] = currentMillis;
indexes[LED]++;
}
if (COLOR[LED][indexes[LED]] == -1) {
indexes[LED] = 0;
}
}
}
Specifically this line DOT[LED] = COLOR[LED][indexes[LED]];
If I only look at the code it looks like it's doing
DOT[1] = COLOR[1][indexes[1]];
DOT[2] = COLOR[2][indexes[2]];
DOT[3] = COLOR[3][indexes[3]];
......
But what the leds actually do seems more like
DOT[1] = COLOR[1][indexes[1]];
DOT[2] = COLOR[2][indexes[1]];
DOT[3] = COLOR[3][indexes[1]];
......
Right now the way this code addresses LEDs is like
LED 1- frame 1, frame 2, frame 3...
LED 2- frame 1, frame 2, frame 3...
LED 3- frame 1, frame 2, frame 3...
......
I'm trying to modify it to be
frame 1 -LED 1, LED 2, LED 3...
frame 2 -LED 1, LED 2, LED 3...
frame 3 -LED 1, LED 2, LED 3...
......
Any help is appreciated!