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?
Connecting multiple 8x8 NeoPixel panels together?
Moderators: adafruit_support_bill, adafruit
Please be positive and constructive with your questions and comments.
- Jason_B93
- Posts: 10
- Joined: Thu Nov 17, 2022 2:28 am
- Jason_B93
- Posts: 10
- Joined: Thu Nov 17, 2022 2:28 am
Re: Connecting multiple 8x8 NeoPixel panels together?
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.
So a lookup table. I'm not good enough with math to calculate the index from coordinates so this will have to do.
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;
}
- Jason_B93
- Posts: 10
- Joined: Thu Nov 17, 2022 2:28 am
Re: Connecting multiple 8x8 NeoPixel panels together?
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;
}
- adafruit_support_bill
- Posts: 88136
- Joined: Sat Feb 07, 2009 10:11 am
Re: Connecting multiple 8x8 NeoPixel panels together?
Duplicate thread. Please do not double post: viewtopic.php?t=196220
Please be positive and constructive with your questions and comments.