Connecting multiple 8x8 NeoPixel panels together?

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
Jason_B93
 
Posts: 10
Joined: Thu Nov 17, 2022 2:28 am

Connecting multiple 8x8 NeoPixel panels together?

Post by Jason_B93 »

Hi everyone,

I bought 4 of the 8x8 NeoPixel panels with the intention to made a 16x16 array but I'm having trouble wrapping my head around addressing each of the LEDs. I intend to wire the panels like this
1,3
2,4
And I'm trying to figure out how to take in an LED's XY position and convert it to an LED index. Has anyone done this before?

User avatar
Jason_B93
 
Posts: 10
Joined: Thu Nov 17, 2022 2:28 am

Re: Connecting multiple 8x8 NeoPixel panels together?

Post by Jason_B93 »

I think I have a solution but I don't like it. Using Garrett Mace's XY map generator, I think this code will be a drop in replacement.

Code: Select all

uint8_t XY (uint8_t x, uint8_t y) {
  // any out of bounds address maps to the first hidden pixel
  if ( (x >= kMatrixWidth) || (y >= kMatrixHeight) ) {
    return (LAST_VISIBLE_LED + 1);
  }

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

  uint8_t i = (y * kMatrixWidth) + x;
  uint8_t j = XYTable[i];
  return j;
}
So a lookup table. I'm not good enough with math to calculate the index from coordinates so this will have to do.

User avatar
Jason_B93
 
Posts: 10
Joined: Thu Nov 17, 2022 2:28 am

Re: Connecting multiple 8x8 NeoPixel panels together?

Post by Jason_B93 »

I posted this question on reddit and someone from there was nice enough to reply to me. I'm pasting the code below for anyone else connecting multiple panels together.

Code: Select all

#include <FastLED.h>

#define kMatrixWidth 16
#define kMatrixHeight 16
#define NUM_LEDS ((kMatrixWidth) * (kMatrixHeight))

CRGB leds[NUM_LEDS];

uint16_t XY(int8_t x, int8_t y) {
  if (x >= kMatrixWidth || y >= kMatrixHeight || x < 0 || y < 0)
    return -1;

  // determine which panel this pixel falls on
  const uint8_t panel_size = 8;
  uint8_t x_panel = x / panel_size;
  uint8_t y_panel = y / panel_size;
  // and where in the leds[] array this panel starts
  uint16_t paneloffset = (2 * x_panel + y_panel) * panel_size * panel_size;

  // constrain coordinates to the panel size
  x %= panel_size;
  y %= panel_size;

  // serpentine layout panels have odd rows reversed
  if (y & 1)
    x = panel_size - 1 - x;

  return paneloffset + x + y * panel_size;
}

User avatar
adafruit_support_bill
 
Posts: 88088
Joined: Sat Feb 07, 2009 10:11 am

Re: Connecting multiple 8x8 NeoPixel panels together?

Post by adafruit_support_bill »

Duplicate thread. Please do not double post: viewtopic.php?t=196220

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”