You're using far too many FastLed.show(); only use it when you have set all the colours.
You can use an array to store the patterns and next iterate over the array.
I've used an array of structs. The struct defines the color for the individual leds in the strips and the duration that they must be on. It's probably more flexible to use R, G and B and not e.g. CRGB::Red, but as you used the latter
#define NUM_STRIPS 2
#define NUM_LEDS 4
struct PATTERN
{
CRGB strip[NUM_STRIPS][NUM_LEDS];
uint32_t duration;
};
// example pattern
PATTERN patterns[] =
{
{
// strip 1 strip 2 duration
{{CRGB::Red, CRGB::Black, CRGB::Black, CRGB::Black}, {CRGB::Red, CRGB::Black, CRGB::Black, CRGB::Black}}, 1000
},
{
{{CRGB::Black, CRGB::Black, CRGB::Black, CRGB::Black}, {CRGB::Black, CRGB::Black, CRGB::Black, CRGB::Black}}, 500
},
};
Iterating over the patterns
void circleLoop () {
FastLED.setBrightness(BRIGHTNESS );
for (uint16_t patCnt = 0; patCnt < sizeof(patterns) / sizeof(patterns[0]); patCnt++)
{
// set all the leds
for (int ledCnt = 0; ledCnt < NUM_LEDS; ledCnt++)
{
leds[ledCnt] = patterns[patCnt].strip[0][ledCnt];
leds2[ledCnt] = patterns[patCnt].strip[1][ledCnt];
}
FastLED.show();
delay(patterns[patCnt].duration);
}
}
Not tested