LED strip (WS2812B/5050) programming help

I am trying to work out how to do the following:

I have a circle of 64 LEDs on a WS2812B strip.

I want to work out an easy way to address a ‘block’ of LEDs for the purposes of changing colour/brightness.

The attached image shows how I would like to ‘block address’ the groups of LEDs.

If you think of it as a primitive ‘Simon’ game :slight_smile:

My programming is basic, but I am getting there… using the FASTLed library:

#define Area_A 1
#define Area_B 17
#define Area_C 33
#define Area_D 49
leds[Area_A] CRGB::Blue; leds[Area_A+1] CRGB::Blue;leds[Area_A+2] CRGB::Blue;...leds[Area_A+15] CRGB::Blue;
leds[Area_B] CRGB::Yellow; leds[Area_B+1] CRGB::Yellow;leds[Area_B+2] CRGB::Yellow;...leds[Area_B+15] CRGB::Yellow;

But it’s really clunky…

Any help gratefully received!

LED-Wheel.png

Hi,

Use a function containing a for-loop like this:

void setArea (int a, CRGB c) {
  for (int n = a; n <= a+15; n++) {
    leds [n] = c;
  }
}

...
setArea (Area_A, CRGB::Yellow);
...

That’s great! Thanks Paul, it works perfectly.

Just in a couple of hours, thanks to your example, I have learned so much about controlling the Arduino and using the FastLED library. Thanks so much.

FWIW, this is my first piece of code that begins to give me what I want (You can see I’m a big fan of variables :slight_smile: ):

And now I am able to create a display for any sized string with any sized fixed area. Now to get into the hard bits of code :slight_smile: The ones where things have to move and be read and decisions made…

    #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 20 //How many pixels per area total (including NAV)
    #define NUM_LEDS Area_Size*4 // size of LED String
    
    #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 Area_A Area_NA+NAV //Start of Area A
    #define Area_B Area_NB+NAV //Start of Area B
    #define Area_C Area_NC+NAV //Start of Area C
    #define Area_D Area_ND+NAV //Start of Area D
    
    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(10);}

  void setNavArea (int a, CRGB c) { // set up fixed NAV area
    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 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 (Area_A, CRGB::Orange);
    setArea (Area_B, CRGB::White);
    setArea (Area_C, CRGB::White);
    setArea (Area_D, CRGB::Orange);
    
    FastLED.show() ;} //display LEDs
    
  }

When posting code on the forum you should use Code tags. You have been using Quote tags. Look at my list compared to yours to see the difference. Its the # button to the left of the quote button when composing a message. The Code tags preserve formatting so the code looks like it does in the Arduino IDE. Quote tags can make code difficult to read, especially with C/C++ where brackets and semicolons can get turned into smileys! :wink:

Thanks Paul :slight_smile:

Too many years yacking on fora and not enough time coding, I now see...

And thanks again for your help -I've had a most productive day!