Got all 256 LEDs addressable and figured out the serpentine mapping.
#leds#esp32
First milestone: get the panel lit and individually addressable. The panel is
wired in a serpentine pattern, so even rows run left-to-right and odd rows
right-to-left. Without accounting for that, text comes out mirrored on every
other row. The mapping that fixed it:
uint16_t xyToIndex(uint8_t x, uint8_t y) { return (y % 2 == 0) ? y * 16 + x : y * 16 + (15 - x);}
With that in place I could light arbitrary (x, y) pixels and start laying out
where each word sits on the grid.