@UKHeliBob So, I figured out some stuff and optimized the code generation for patterns only. I also fixed the bug for pattern generation.
This is the code it generates now for the bounce right pattern.
#include <FastLED.h>
#define NUM_LEDS 30
#define DATA_PIN A0
CRGB leds[NUM_LEDS];
void shiftRight(byte reds[], byte greens[], byte blues[]) {
int tempRed = reds[NUM_LEDS - 1];
int tempGreen = greens[NUM_LEDS - 1];
int tempBlue = blues[NUM_LEDS - 1];
for(int ledIndex = NUM_LEDS - 1; ledIndex > 0; ledIndex -= 1) {
reds[ledIndex] = reds[ledIndex - 1];
greens[ledIndex] = greens[ledIndex - 1];
blues[ledIndex] = blues[ledIndex - 1];
}
reds[0] = tempRed;
greens[0] = tempGreen;
blues[0] = tempBlue;
}
void shiftLeft(byte reds[], byte greens[], byte blues[]) {
int tempRed = reds[0];
int tempGreen = greens[0];
int tempBlue = blues[0];
for(int ledIndex = 0; ledIndex < NUM_LEDS - 1; ledIndex += 1) {
reds[ledIndex] = reds[ledIndex + 1];
greens[ledIndex] = greens[ledIndex + 1];
blues[ledIndex] = blues[ledIndex + 1];
}
reds[NUM_LEDS - 1] = tempRed;
greens[NUM_LEDS - 1] = tempGreen;
blues[NUM_LEDS - 1] = tempBlue;
}
void displayLeds(byte reds[], byte greens[], byte blues[]) {
for(int ledIndex = 0; ledIndex < NUM_LEDS; ledIndex += 1) {
leds[ledIndex].setRGB(reds[ledIndex], greens[ledIndex], blues[ledIndex]);
}
FastLED.show();
delay(500);
}
void setup() {
FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(10);
}
void loop() {
// We declare these large values here for memory reasons
byte reds[] = { 170,170,170,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte greens[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte blues[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
for(int i = 0; i < 30; i += 1) {
shiftRight(reds, greens, blues);
displayLeds(reds, greens, blues);
}
}
You can preview the changes here.
Thank you!
Noah