Hi Ac5ff,
sorry for the late reply, and thank you so much for the very nice compliments! Definitely a motivator to keep going
...
I have not done much with arrays and LEDs, but maybe I can help you get started.
What are you trying to accomplish with the 12x40 LED array?
If you'd like to address individual LEDs, then this most certainly is possible.
I'd think about something like this:
1) Use on long LED strand of 240 LEDs (12x40).
2) Cut it in pieces of 40 LEDs, so we get 12 strands.
3) Connect the end of strand 1 to the beginning of strand 2, the end of strand 2 to the beginning of strand 3, etc ...
4) Now connect this "reformatted"strand to your Arduino, so we can do a basic test if all LEDs work, see also this article.
5) We define a 12x40 array in our sketch, so it helps us "translate" the array coordinates to actual LED positions.
Keep in mind, that we in essence still use one large strand of LEDs, so the positions are 0, 1, 2, 3, ... ,238, 239.
(we start counting at zero so the last LED will be number 239)
Next we need to setup an array by defining it. Since we use an X and Y position on our array, we would need to define a multi-dimensional array (see also this article).
int LedArray[12,40];
Now we need to add our "translation" to the table, which we could enter manually of have our Arduino for it for us, since it's a lot of manual work.
Either one by one (inefficient) in the setup() function:
LedArray[0][0] = 0;
LedArray[0][1] = 1;
LedArray[0][2] = 2;
...
LedArray[0][8] = 8;
LedArray[0][9] = 9;
LedArray[0][10] = 10;
LedArray[0][11] = 11;
LedArray[1][0] = 12;
LedArray[1][1] = 13;
LedArray[1][2] = 14;
LedArray[1][3] = 14;
...
// etc
or right away define it as (before the void setup() function):
int LedArray[12][40] = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
{ 12, 13, 14, 15, 16 ,17, 18, 19, 20, 21, 22, 23 },
....
{ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239 } };
Either way is taking up a lot of manual typing work ...
So I'd do that in the "void setup()" function with two for-loops that count X and Y:
void setup() {
int counter = 0;
for(int x=0; x<12; x++) {
for(int y=0; y<40; y++) {
LedArray[x][y] = counter;
counter++;
}
}
}
So now we should have an array, filled with the correct positions.
For example if we want the LED at (5,12) then this would be the (4x40) + 12 - 1 = 171th LED in our strand.
Keep in mind; X = 5 means that we have 4 full 40 LED columns, and the for the 5th column we only use 12 of the LEDs down.
Since we start counting with zero, we need to subtract 1 from the total.
(I hope I calculated that right hahaha)
After having done this (not sure how fast the Arduino would do this, but I'm pretty sure very fast), we can now set LEDs individually.
For example with NeoPixel, to set the pixel at X=5 and Y=12:
without array:
strip.setPixelColor(171, strip.Color(255, 0, 0)); // we calculated the position
or
strip.setPixelColor( ( (x-1)*40 ) + y - 1, strip.Color(255, 0, 0)); // the Arduino calculates the position
or with the array where "LedArray[5][12]" holds the number 171 (I hope):
strip.setPixelColor(LedArray[5][12], strip.Color(255, 0, 0)); // we pull the number from our array
Don't forget to make the LED visible with:
strip.show();
As you can see, the calculation of the LED position is not that hard, so an array is not really needed.
We could even glue that into a function (to keep things readable - more info on functions here):
int GetLEDPosition(int x, y) {
return ( (x-1)*40 ) + y - 1;
}
So we could do the following and not even need an array:
strip.setPixelColor(GetLEDPosition(5,12), strip.Color(255, 0, 0));
Is this what you're looking for?
Note that I haven't had a chance to any of the code, so I could have made a typo or calculation mistake - it's still early in the morning here, and I could use some more cofffee hahah ...
p.s. the numbers 12 and 40 I'd normally would make constants with a define (see this article). Something like:
#define maxX 12
#define maxY 40
And replace all occurrences of 12 with "maxX" and all occurrences of 40 with "maxY" - which would make it easier in the future ro change the dimensions of your array if you'd need to.