Sketch uses 8878 bytes (27%) of program storage space. Maximum is 32256 bytes.
And with all your text and const data kept in flash you still have room for 400 patterns with color as 1 byte to 800 patterns with color as 1 nybble.
You can also use algorithms to make light patterns and effects like moving patterns. I've started to play with that, got 12mm string leds (50 per string until I cut or splice... you have same?) two days ago and had to 'speriment. Next thing I have in mind is morphing colors from one pattern to the next pattern, all the leds "at the same time" to get a flow look.
I haven't gone to PROGMEM with this, algos don't take much RAM.
It's not the best effects but you might like how it works... or not.
#include <FastLED.h>
// LED LIGHTING SETUP
#define DATA_PIN 7
#define NUM_LEDS 50
#define BRIGHTNESS 128
#define LED_TYPE WS2811
#define COLOR_ORDER RGB
CRGB leds[NUM_LEDS], tRGB;
byte idx;
int pattern;
const int patterns = 250;
// human eye sees motion at 24 FPS, TV is 30FPS
#define UPDATES_PER_SECOND 30
// leave cycles for more strips, Uno/Nano should run many with fast code
void setup()
{
// LED LIGHTING SETUP
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.setBrightness(200);
}
void loop()
{
static unsigned long tStart, tWait = 250;
switch ( pattern )
{
case 0 :
leds[ idx ].red = idx * 5;
leds[ idx ].green = 250 - ( idx * 5 );
leds[ idx ].blue = 0;
break;
case 50 :
leds[ idx ].green = idx * 5;
leds[ idx ].blue = 250 - ( idx * 5 );
leds[ idx ].red = 0;
break;
case 100 :
leds[ idx ].blue = idx * 5;
leds[ idx ].red = 250 - ( idx * 5 );
leds[ idx ].green = 0;
break;
case 150 :
switch ( idx % 6 )
{
case 0 :
leds[ idx ].red = 127;
leds[ idx ].green = 0;
leds[ idx ].blue = 0;
break;
case 1 :
leds[ idx ].red = 63;
leds[ idx ].green = 63;
leds[ idx ].blue = 0;
break;
case 2 :
leds[ idx ].red = 0;
leds[ idx ].green = 127;
leds[ idx ].blue = 0;
break;
case 3 :
leds[ idx ].red = 0;
leds[ idx ].green = 63;
leds[ idx ].blue = 63;
break;
case 4 :
leds[ idx ].red = 0;
leds[ idx ].green = 0;
leds[ idx ].blue = 127;
break;
case 5 :
leds[ idx ].red = 63;
leds[ idx ].green = 0;
leds[ idx ].blue = 63;
break;
}
break;
case 200 :
switch ( idx / 9 )
{
case 0 :
leds[ idx ].red = 127;
leds[ idx ].green = 0;
leds[ idx ].blue = 0;
break;
case 1 :
leds[ idx ].red = 63;
leds[ idx ].green = 63;
leds[ idx ].blue = 0;
break;
case 2 :
leds[ idx ].red = 0;
leds[ idx ].green = 127;
leds[ idx ].blue = 0;
break;
case 3 :
leds[ idx ].red = 0;
leds[ idx ].green = 63;
leds[ idx ].blue = 63;
break;
case 4 :
leds[ idx ].red = 0;
leds[ idx ].green = 0;
leds[ idx ].blue = 127;
break;
case 5 :
leds[ idx ].red = 63;
leds[ idx ].green = 0;
leds[ idx ].blue = 63;
break;
}
break;
default :
if ( idx == 0 )
{
tRGB = leds[ NUM_LEDS - 1 ];
leds[ NUM_LEDS - 1 ] = leds[ NUM_LEDS - 2 ];
}
else if ( idx == NUM_LEDS - 1 )
{
leds[ 0 ] = tRGB;
}
else
{
leds[ NUM_LEDS - idx - 1 ] = leds[ NUM_LEDS - idx - 2 ];
}
}
if ( idx < NUM_LEDS - 1 )
{
idx++;
}
else
{
if ( pattern < 100 )
{
tWait = 180;
}
if ( pattern < 200 )
{
tWait = 120;
}
else
{
tWait = 240;
}
if ( millis() - tStart >= tWait )
{
FastLED.show();
idx = 0;
if ( pattern == patterns )
{
pattern = 150;
}
else
{
pattern++;
}
tStart = millis();
}
}
}