I wanted to arrange an LED strip into ‘zones’ where each zone behaved differently - so for example zone A was a fixed colour, zone B showed a changing pattern, zone C was fixed, etc.
Please excuse my extremely ugly code…
#include <FastLED.h>
#define DATA_PIN 6 // Arduino data pin > WS2812B
#define TYPE WS2812B // LED String type according to FastLED
#define ORDER GRB // Define colour display order - WS strings are GRB
#define NAV 5 //How many pixels for NAV area
#define Area_Size 32 //How many pixels per area total (including NAV)
#define NUM_LEDS Area_Size*4 // size of LED String
#define BRT 15 // Set overall brightness 1-255
#define Area_NA 0 //Start of Nav Area A
#define Area_NB Area_Size*1 //Start of Nav Area B
#define Area_NC Area_Size*2 //Start of Nav Area C
#define Area_ND Area_Size*3 //Start of Nav Area D
#define VArea_A Area_NA+NAV //Start of Area A
#define VArea_B Area_NB+NAV //Start of Area B
#define VArea_C Area_NC+NAV //Start of Area C
#define VArea_D Area_ND+NAV //Start of Area D
int NAA[NAV][3]; // Array for Nav Area A
int NAB[NAV][3]; // Array for Nav Area A
int NAC[NAV][3]; // Array for Nav Area A
int NAD[NAV][3]; // Array for Nav Area A
int VAA[Area_Size-NAV][3]; // Array for Variable Area A
int VAB[Area_Size-NAV][3]; // Array for Variable Area A
int VAC[Area_Size-NAV][3]; // Array for Variable Area A
int VAD[Area_Size-NAV][3]; // Array for Variable Area A
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<TYPE, DATA_PIN, ORDER>(leds, NUM_LEDS); // initialise string
FastLED.showColor(CRGB::Black); // clear LEDs
FastLED.setBrightness(BRT);
}
// set up fixed NAV area
void setNavArea (int a, CRGB c) {
for (int n = a; n <= a+(NAV-1); n++) {
leds [n] = c;
}
}
// set up variable area
void setArea (int a, CRGB c) {
for (int n = a; n <= a+(Area_Size-NAV-1); n++) {
leds [n] = c;
}
}
void copy_led_array(){
for(int i = 0; i < NAV; i++ ) {
ledsX[i][0] = leds[i].r;
ledsX[i][1] = leds[i].g;
ledsX[i][2] = leds[i].b;
}
}
void loop() {
// initialise NAV areas
setNavArea (Area_NA, CRGB::Red);
setNavArea (Area_ND, CRGB::Red);
setNavArea (Area_NB, CRGB::Blue);
setNavArea (Area_NC, CRGB::Blue);
/* initialise variable areas
setArea (VArea_A, CRGB::Aqua);
setArea (VArea_B, CRGB::Yellow);
setArea (VArea_C, CRGB::White);
setArea (VArea_D, CRGB::Coral); */
FastLED.show();
delay(500);
// Blink Red NAV
setNavArea (Area_NA, CRGB::Black);
setNavArea (Area_ND, CRGB::Black);
// setNavArea (Area_NB, CRGB::Black);
// setNavArea (Area_NC, CRGB::Black);
FastLED.show() ;
delay(500);
}