XYmap.h
1 // SPDX-FileCopyrightText: 2019 Anne Barela for Adafruit Industries 2 // 3 // SPDX-License-Identifier: MIT 4 5 // Helper functions for a two-dimensional XY matrix of pixels. 6 // Special credit to Mark Kriegsman for RGB Shades Kickstarter 2014-10-18 7 // https://www.kickstarter.com/projects/macetech/rgb-led-shades 8 // 9 // This special 'XY' code lets you program as a plain matrix. 10 // 11 // Writing to and reading from the 'holes' in the layout is 12 // also allowed; holes retain their data, it's just not displayed. 13 // 14 // You can also test to see if you're on or off the layout 15 // like this 16 // if( XY(x,y) > LAST_VISIBLE_LED ) { ...off the layout...} 17 // 18 // X and Y bounds checking is also included, so it is safe 19 // to just do this without checking x or y in your code: 20 // leds[ XY(x,y) ] == CRGB::Red; 21 // All out of bounds coordinates map to the first hidden pixel. 22 // 23 // XY(x,y) takes x and y coordinates and returns an LED index number, 24 // for use like this: leds[ XY(x,y) ] == CRGB::Red; 25 26 27 // Parameters for width and height 28 const uint8_t kMatrixWidth = 24; 29 const uint8_t kMatrixHeight = 8; 30 const uint8_t kBorderWidth = 2; //for swirly 31 32 #define NUM_LEDS (kMatrixWidth * kMatrixHeight) 33 CRGB leds[ NUM_LEDS ]; 34 35 // This function will return the right 'led index number' for 36 // a given set of X and Y coordinates on DiscoBandCamp 37 // This code, plus the supporting 80-byte table is much smaller 38 // and much faster than trying to calculate the pixel ID with code. 39 #define LAST_VISIBLE_LED 119 40 uint8_t XY( uint8_t x, uint8_t y) 41 { 42 // any out of bounds address maps to the first hidden pixel 43 if( (x >= kMatrixWidth) || (y >= kMatrixHeight) ) { 44 return (LAST_VISIBLE_LED + 1); 45 } 46 47 // On the visual left of DiscoBandCamp, wearers right 48 // +------------------------------------------ 49 // | 10 9 8 7 6 5 4 3 2 1 0 50 // | . 20 19 18 17 16 15 14 13 12 11 51 // | . . 29 28 27 26 25 24 23 22 21 52 // | . . . 37 36 35 34 33 32 31 30 53 // | . . . . 44 43 42 41 40 39 38 54 // | . . . . . 50 49 48 47 46 45 55 // | . . . . . . 55 54 53 52 51 56 // | . . . . . . . 59 58 57 56 57 58 //this is how DiscoBandCamp works 59 const uint8_t JacketTable[] = { 60 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 145, 61 153,60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 62 120,11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 146, 63 154,80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 182, 64 121,127,21, 22, 23, 24, 25, 26, 27, 28, 29, 147, 65 155,89, 88, 87, 86, 85, 84, 83, 82, 81, 176,183, 66 122,128,133,30, 31, 32, 33, 34, 35, 36, 37, 148, 67 156,97, 96, 95, 94, 93, 92, 91, 90, 171,177,184, 68 123,129,134,135,38, 39, 40, 41, 42, 43, 44, 149, 69 157,104,103,102,101,100,99, 98, 167,172,178,185, 70 124,130,134,136,139,45, 46, 47, 48, 49, 50, 150, 71 158,110,109,108,107,106,105,164,168,173,179,186, 72 125,131,134,137,140,142,51, 52, 53, 54, 55, 151, 73 159,115,114,113,112,111,162,165,169,174,180,187, 74 126,132,134,138,141,143,144,56, 57, 58, 59, 152, 75 160,119,118,117,116,161,163,166,170,175,181,188, 76 }; 77 78 uint8_t i = (y * kMatrixWidth) + x; 79 uint8_t j = JacketTable[i]; 80 return j; 81 }