Page 1 of 1

Arrays

Arrays

Welcome to the Tweaking4All community forums!
When participating, please keep the Forum Rules in mind!

Topics for particular software or systems: Start your topic link with the name of the application or system.
Examples: "MacOS X - Your question", "MS Word - Your Tip or Trick".

Please note that switching to another language when reading a post will not work!
Posts will not have a translated counterpart.




RSS Feed

Home Forums Hardware Arduino Arrays

Tagged: , , ,

This topic contains 1 reply, has 2 voices, and was last updated by  hans 1 month, 1 week ago.

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • 7469

    ac5ff
    Participant

    First off, I have been reading/watching YouTube/etc etc etc for a while now.  Not sure why, but today was the first time I have run across your website.  I’ve already bookmarked a dozen pages I think! HAHA!    Thank you SO much for all this information.  You’ve put things together in a way that makes things easy to understand and has cleared up a TON of questions I have had.

    I am looking forward to getting my LEDs hooked up to my Arduino and playing around with some of the code you’ve layed out here.

    I’ve tried to browse around some but have not located a good walkthrough on arrays.  I would like to set up a 12 x 40 array.  I’ve seen software that will aid in setup/programming/etc, but those mainly use a seperate controller (i.e. T1000s).  I would like to see if I can do the same thing with the Arduino.

    Is there anything on your site using an Arduino to control an array like this?

    Thank You

    7488

    hans
    Keymaster

    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 12×40 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 (12×40).
    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 12×40 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 (4×40) + 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.

Viewing 2 posts - 1 through 2 (of 2 total)



You must be logged in to reply to this topic.