Array of Arrays

I made an array of arrays so that I can have a series of nested for loops that selects the array, index through the array, and sets the array to the first color in the color array. My arrays are different sizes so i ended each one with a “-1” so that when for for loop sees “-1” it breaks out of the loop. However, nothing is showing up on the LED’s with this code and I’m guessing I’m making an obvious mistake that I can’t see. If anyone has a suggestion on how to get this working I’d appreciate it.

#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

#define NUM_LEDS 248
#define CLOCK_PIN 5
#define DATA_PIN 4
CRGB leds[NUM_LEDS];
#define COLOR_ORDER BGR
#define BRIGHTNESS  50

int master_array[13][27] =                                                                   //array of arrays
{
  {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1},
  {24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1},
  {48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,-1},
  {60, 61, 62, 63, 64, 65, 66, 67, 68, 83, 84, 85, 86, 86, 87, 88,-1},
  {69, 70, 77, 78, 79, 80, 81, 82, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,-1},
  {71, 72, 73, 74, 75, 76, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 124, 125, 126, 127,-1},
  {309, 310, 311, 130, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 128, 129, 130, 131, 132, 133,-1},
  {134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,-1},
  {154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 191, 192, 193, 194, 195, 196, 197, 198,-1},
  {164, 165, 166, 167, 168, 169, 182, 183, 184, 185, 186, 187, 188, 189,-1},
  {170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,-1},
  {199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,-1},
  {223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,-1},
};

float colors[] = {CRGB::White, CRGB::Yellow, CRGB::Orange, CRGB::Green, CRGB::Blue, CRGB::Purple}; //Array of Colors

int ROW = 100;
int COLUMN = 100;
int j;
int i;
int k;



int main () {

  for (i = 0; i < ROW; i++)
  {

    for (j = 0; j <= COLUMN; j++)
    {
        if (master_array[i][j] = -1)
        {
          break;
        }
            for (k = 0; k < 6; k++)
          {
            master_array[i][j] = colors[k];
            FastLED.show();
            delay (10);
            FastLED.clear ();
          }
      }
  }
  
  return 0;
}

I'm guessing I'm making an obvious mistake that I can't see.

yes it is:-

My arrays are different sizes so i ended each one with a "-1"

When you make an array of arrays or two dimensional array as it is known all the arrays must be of the same size. How is the compiler supposed to know you want to pad one of the arrays out when it sees a -1?

Thanks for the advice. If I understand you correctly I set “int master_array[27][27]” and ROW=27 and COLUMN=27. I’m still not getting anything to light up. I threw a few serial.print statements in my loops too to see if if the loops were running or if the problem was with the color array, but the print statements either don’t print or only print the first couple characters and never anything else after that.

I’m sure you understand it, but I put the -1 in my array because there are no negative numbers so that the arrays could be uneven and as they are indexed through when it hits “-1” it will break from the loop. I was hoping this would allow me to have arrays of different length but apparently not. I suppose I could split my largest arrays into two arrays so make the overall size smaller.

I hope I’m using the right terminology. I wanted an array of arrays.

I’m looking for something like this:
array_master = { {array0}, {array1}, {array2}, {array3} }

Not like like this:
Array = {
x x x x x x
x x x x x x
x x x x x x
}
They’re different in my head, but I don’t know if there’s a difference in coding if that makes sense.

I’m programming a Nano and because I originally wrote a for loop for each array (to turn it on and off) however to space memory on my nano I switched to making nested for loops. While I am using considerably less program storage space then the for loop approach(24% compared to 12%), I am using significantly more global variable space in this approach (82% of dynamic memory compared to 74%). Did I take the wrong coding approach? Thanks again.

#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

#define NUM_LEDS 248
#define CLOCK_PIN 5
#define DATA_PIN 4
CRGB leds[NUM_LEDS];
#define COLOR_ORDER BGR
#define BRIGHTNESS  50

int master_array[27][27] =                                                                   //array of arrays
{
  {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1},
  {24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1},
  {48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1},
  {60, 61, 62, 63, 64, 65, 66, 67, 68, 83, 84, 85, 86, 86, 87, 88, -1},
  {69, 70, 77, 78, 79, 80, 81, 82, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 1},
  {71, 72, 73, 74, 75, 76, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 124, 125, 126, 127, -1},
  {309, 310, 311, 130, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 128, 129, 130, 131, 132, 133, -1},
  {134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, -1},
  {154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 191, 192, 193, 194, 195, 196, 197, 198, -1},
  {164, 165, 166, 167, 168, 169, 182, 183, 184, 185, 186, 187, 188, 189, -1},
  {170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, -1},
  {199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, -1},
  {223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, -1},
};

int ROW = 27;
int COLUMN = 27;
int j;
int i;
int k;
float colors[] = {CRGB::White, CRGB::Yellow, CRGB::Orange, CRGB::Green, CRGB::Blue, CRGB::Purple}; //Array of Colors


int main () {
  Serial.begin(9600);
  Serial.print("AA");
  Serial.print("BB");
    Serial.print (master_array[i][j] =colors[k]);

  for (i = 0; i < ROW; i++)
  {
   
    for (j = 0; j <= COLUMN; j++)
    {
      if (master_array[i][j] = -1)
      {
        break;
      }
      for (k = 0; k < 6; k++)
      {
        master_array[i][j] =colors[k];
        FastLED.show();
        delay (10);
        FastLED.clear ();
      }
    }
  }

  return 0;
}

That is not Arduino code is it? That is it will not compile under the Arduino IDE. So no wonder nothing will print.

I understand why you use -1 but the C compiler doesn’t. All array elements must be defined or it screws up the array. If you have to use arrays with different element sizes you have to handle the array index yourself.