FastLED - Fill Solid inside a For Loop / How to Call a Function inside loop()

Okay, my first Arduino project (total n00b) is a basic LED Turn Signal with a few different functions. I have an 8x32 Flexible RGB WS2812 Panel and I’m trying to create some basic animations using For Loops.

This works fine to perform the basic sequential turn signal flash down the columns of the Matrix:

#include "FastLED.h"

#define NUM_LEDS 256
#define Data_Pin 6
#define chipset NEOPIXEL
#define BRIGHTNESS  255
#define DELAYVal 20
#define COLORVal 0,235,255
#define COLORVal2 0,0,0

CRGB rawleds[NUM_LEDS];
CRGBSet leds(rawleds, NUM_LEDS);
CRGBSet all(leds(0, 256));

void setup() {
  FastLED.addLeds<chipset, Data_Pin>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.setMaxPowerInVoltsAndMilliamps(5, 1500);
  set_max_power_indicator_LED(13);

  //flash white to verify power on
  fill_solid(all, 256, CRGB( 255, 255, 255));
  FastLED.show();
  delay(500);
  fill_solid(all, 256, CRGB( 0, 0, 0));
  FastLED.show();
  delay(500);
  turnSignal();

}
void loop() {
 for (int i = 0; i < 255; i = i + 8) {
    leds[i] = COLORVal;
    leds[i + 1] = COLORVal;
    leds[i + 2] = COLORVal;
    leds[i + 3] = COLORVal;
    leds[i + 4] = COLORVal;
    leds[i + 5] = COLORVal;
    leds[i + 6] = COLORVal;
    leds[i + 7] = COLORVal;
    FastLED.show();
    FastLED.delay(DELAYVal);
  }
  all = COLORVal2;
  FastLED.show();
}

But when I try to move that code into a Function and call the function like so, the Arduino powers up, flashes white (see Setup() ) and then nothing. Here is my code for that:

#include "FastLED.h"

#define NUM_LEDS 256
#define Data_Pin 6
#define chipset NEOPIXEL
#define BRIGHTNESS  255
#define DELAYVal 20
#define COLORVal 0,235,255
#define COLORVal2 0,0,0
void turnSignal();

CRGB rawleds[NUM_LEDS];
CRGBSet leds(rawleds, NUM_LEDS);
CRGBSet all(leds(0, 256));

void setup() {
  FastLED.addLeds<chipset, Data_Pin>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.setMaxPowerInVoltsAndMilliamps(5, 1500);
  set_max_power_indicator_LED(13);

  //flash white to verify power on
  fill_solid(all, 256, CRGB( 255, 255, 255));
  FastLED.show();
  delay(500);
  fill_solid(all, 256, CRGB( 0, 0, 0));
  FastLED.show();
  delay(500);
  turnSignal();

}
void loop() {
 turnSignal();
}

void turnSignal() {
   for (int i = 0; i < 255; i = i + 8) {
    leds[i] = COLORVal;
    leds[i + 1] = COLORVal;
    leds[i + 2] = COLORVal;
    leds[i + 3] = COLORVal;
    leds[i + 4] = COLORVal;
    leds[i + 5] = COLORVal;
    leds[i + 6] = COLORVal;
    leds[i + 7] = COLORVal;
    FastLED.show();
    FastLED.delay(DELAYVal);
  }
  all = COLORVal2;
  FastLED.show();
}

Lastly is there a way to utilize Fill_solid or some other library to fill columns instead of using what I’m doing now? My first rough draft I used Fill_Solid and a bunch of arrays (one for each column) But the code was long and messy. It worked, but I wanted to clean it up and loop instead of being so verbose… You can see my embarassing code here:

CRGB rawleds[NUM_LEDS];
CRGBSet leds(rawleds, NUM_LEDS);
CRGBSet leds1(leds(0,7));
CRGBSet leds2(leds(8,15));
CRGBSet leds3(leds(16,23));
CRGBSet leds4(leds(24,31));
CRGBSet leds5(leds(32,39));
CRGBSet leds6(leds(40,47));
CRGBSet leds7(leds(48,55));
CRGBSet leds8(leds(56,63));
CRGBSet leds9(leds(64,71));
CRGBSet leds10(leds(72,79));
CRGBSet leds11(leds(80,87));
CRGBSet leds12(leds(88,95));
CRGBSet leds13(leds(96,103));
CRGBSet leds14(leds(104,111));
CRGBSet leds15(leds(112,119));
CRGBSet leds16(leds(120,127));
CRGBSet leds17(leds(128,135));
CRGBSet leds18(leds(136,143));
CRGBSet leds19(leds(144,151));
CRGBSet leds20(leds(152,159));
CRGBSet leds21(leds(160,167));
CRGBSet leds22(leds(168,175));
CRGBSet leds23(leds(176,183));
CRGBSet leds24(leds(184,191));
CRGBSet leds25(leds(192,199));
CRGBSet leds26(leds(200,207));
CRGBSet leds27(leds(208,215));
CRGBSet leds28(leds(216,223));
CRGBSet leds29(leds(224,231));
CRGBSet leds30(leds(232,239));
CRGBSet leds31(leds(240,247));
CRGBSet leds32(leds(248,255));

CRGBSet all(leds(0,256));

struct CRGB * ledsarray[] ={leds1, leds2, leds3, leds4, leds5, leds6, leds7, leds8, leds9, leds10, leds11, leds12, leds13, leds14, leds15, leds16, leds17, leds18, leds19, leds20, leds21, leds22, leds23, leds24, leds25, leds26, leds27, leds28, leds29, leds30, leds31, leds32}; 


void setup() {  
  FastLED.addLeds<chipset, Data_Pin>(leds, NUM_LEDS); 
 FastLED.setBrightness(BRIGHTNESS);
 FastLED.setMaxPowerInVoltsAndMilliamps(5,1500);
 set_max_power_indicator_LED(13);
 fill_solid(all, 256, CRGB( 255, 255, 255));
  FastLED.show();
  delay(500);
  fill_solid(all, 256, CRGB( 0, 0, 0));
  FastLED.show();
  delay(500);
  
}
void loop() { 
 
// Turn the LED on, then pause
  fill_solid(leds1, 8, CRGB( COLORVal));
  FastLED.show();
  delay(DELAYVal);
  fill_solid(leds2, 8, CRGB( COLORVal));
  FastLED.show();
  delay(DELAYVal);
  fill_solid(leds3, 8, CRGB( COLORVal));
  FastLED.show();
  delay(DELAYVal);
  fill_solid(leds4, 8, CRGB( COLORVal));
  FastLED.show();
  delay(DELAYVal);

  //etc. you get the point

I think this would be even cleaner than the previous example, however, it throws a function error like: “no matching function for call to 'fill_solid(crgb&,…”

So I think I can’t use that the way I’m trying to.

Any help would be awesome!

Thanks!
Michael