Ho realizzato un'installazione personalizzata nella mia casa con 896 WS2812 LED pilotato da un ArduinoMega 2560 e alimentato da diversi binari benissimo. Tuttavia, l'installazione è organizzata secondo uno schema a scacchiera. Ci sono 14 pannelli con 8 strisce di 8 LED ciascuna (64 LED per pannello), le strisce sono saldate a zigzag all'interno di un pannello e le piastrelle sono collegate tramite cavi in modo "progressivo a colonna".
Collegarlo e farlo funzionare funziona bene, ma sto cercando di affrontare il modello insolito che ho creato e ho difficoltà a ridimensionare con la mia soluzione attuale. Sono preoccupato che la mia soluzione non sia molto graziosa e utilizzi molta RAM non necessaria. Attualmente sto utilizzando la libreria NeoMatrix di Adafruit.
La mia soluzione è "fingere" come se avessi molti più pixel e utilizzare setRemapFunction ()
per eliminare questi falsi punti della griglia. Ma mentre continuo ad aggiungere pixel falsi, presumo che la RAM in testa sia messa da parte per loro e lo spingerò al massimo prima di finire. Ho 896 pixel reali in totale, ma a questo ritmo dichiaro di averne 1.792. Questo è il mio tentativo di affrontare l'offset ed è un work in progress. Questo utilizza finora circa la metà della mia griglia totale:
const int16_t grid [] = {0, 15, 16, 31, 32, 47, 48, 63, -1, -1 , -1, -1, -1, -1, -1, -1, 256, 271, 272, 287, 288, 303, 304, 319, -1, -1, -1, -1, -1, -1, -1, -1,1, 14, 17, 30, 33, 46, 49, 62, -1, -1, -1, -1, -1, -1, -1, -1, 257 , 270, 273, 286, 289, 302, 305, 318, -1, -1, -1, -1, -1, -1, -1, -1,2, 13, 18, 29, 34, 45 , 50, 61, -1, -1, -1, -1, -1, -1, -1, -1, 258, 269, 274, 285, 290, 301, 306, 317, -1, -1 , -1, -1, -1, -1, -1, -1,3, 12, 19, 28, 35, 44, 51, 60, -1, -1, -1, -1, -1, -1, -1, -1, 259, 268, 275, 284, 291, 300, 307, 316, -1, -1, -1, -1, -1, -1, -1, -1,
4, 11, 20, 27, 36, 43, 52, 59, -1, -1, -1, -1, -1, -1, -1, -1, 260, 267, 276, 283, 292, 299, 308, 315, -1, -1, -1, -1, -1, -1, -1, -1,5, 10, 21, 26, 37, 42, 53, 58, -1, -1, -1, -1, -1, -1, -1, -1, 261, 266, 277, 282, 293, 298, 309, 314, -1, -1, -1, -1, -1, -1, -1, -1,6, 9, 22, 25, 38, 41, 54, 57, -1, -1, -1, -1, -1, -1, -1, -1, 262, 265, 278, 281, 294, 297, 310, 313, -1, -1, -1, -1, -1, -1, -1, -1,7, 8, 23, 24, 39, 40, 55, 56, -1, -1, -1, -1, -1, -1, -1, -1, 263, 264, 279, 280, 295, 296, 311, 312, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, 128, 143, 144, 159, 160, 175, 176, 191, -1, -1, -1, -1, -1, -1, -1, -1, 384, 399, 400, 415, 416, 431, 432, 447,-1, -1, -1, -1, -1, -1, -1, -1, 129, 142, 145, 158, 161, 174, 177, 190, -1, -1, -1, -1, -1, -1, -1, -1, 385, 398, 401, 414, 417, 430, 433, 446,-1, -1, -1, -1, -1, -1, -1, -1, 130, 141, 146, 157, 162, 173, 178, 189, -1, -1, -1, -1, -1, -1, -1, -1, 386, 397, 402, 413, 418, 429, 434, 445,-1, -1, -1, -1, -1, -1, -1, -1, 131, 140, 147, 156, 163, 172, 179, 188, -1, -1, -1, -1, -1, -1, -1, -1, 387, 396, 403, 412, 419, 428, 435, 444,-1, -1, -1, -1, -1, -1, -1, -1, 132, 139, 148, 155, 164, 171, 180, 187, -1, -1, -1, -1, -1, -1, -1, -1, 388, 395, 404, 411, 420, 427, 436, 443,-1, -1, -1, -1, -1, -1, -1, -1, 133, 138, 149, 154, 165, 170, 181, 186, -1, -1, -1, -1, -1, -1, -1, -1, 389, 394, 405, 410, 421, 426, 437, 442,-1, -1, -1, -1, -1, -1, -1, -1, 134, 137, 150, 153, 166, 169, 182, 185, -1, -1, -1, -1, -1, -1, -1, -1, 390, 393, 406, 409, 422, 425, 438, 441,-1, -1, -1, -1, -1, -1, -1, -1, 135, 136, 151, 152, 167, 168, 183, 184, -1, -1, -1, -1, -1, -1, -1, -1, 391, 392, 407, 408, 423, 424, 439, 440,
64, 79, 80, 95, 96, 111, 112, 127, -1, -1, -1, -1, -1, -1, -1, -1, 320, 335, 336, 351, 352, 367, 368, 383, -1, -1, -1, -1, -1, -1, -1, -1,65, 78, 81, 94, 97, 110, 113, 126, -1, -1, -1, -1, -1, -1, -1, -1, 321, 334, 337, 350, 353, 366, 369, 382, -1, -1, -1, -1, -1, -1, -1, -1,66, 77, 82, 93, 98, 109, 114, 125, -1, -1, -1, -1, -1, -1, -1, -1, 322, 333, 338, 349, 354, 365, 370, 381, -1, -1, -1, -1, -1, -1, -1, -1,67, 76, 83, 92, 99, 108, 115, 124, -1, -1, -1, -1, -1, -1, -1, -1, 323, 332, 339, 348, 355, 364, 371, 380, -1, -1, -1, -1, -1, -1, -1, -1,68, 75, 84, 91, 100, 107, 116, 123, -1, -1, -1, -1, -1, -1, -1, -1, 324, 331, 340, 347, 356, 363, 372, 379, -1, -1, -1, -1, -1, -1, -1, -1,69, 74, 85, 90, 101, 106, 117, 122, -1, -1, -1, -1, -1, -1, -1, -1, 325, 330, 341, 346, 357, 362, 373, 378, -1, -1, -1, -1, -1, -1, -1, -1,70, 73, 86, 89, 102, 105, 118, 121, -1, -1, -1, -1, -1, -1, -1, -1, 326, 329, 342, 345, 358, 361, 374, 377, -1, -1, -1, -1, -1, -1, -1, -1,71, 72, 87, 88, 103, 104, 119, 120, -1, -1, -1, -1, -1, -1, -1, -1, 327, 328, 343, 344, 359, 360, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, 192, 207, 208, 223, 224, 239, 240, 255, -1, -1, -1, -1, -1, -1, -1, -1, 448, 463, 464, 479, 480, 495, 496, 511,-1, -1, -1, -1, -1, -1, -1, -1, 193, 206, 209, 222, 225, 238, 241, 254, -1, -1, -1, -1, -1, -1, -1, -1, 449, 462, 465, 478, 481, 494, 497, 510,-1, -1, -1, -1, -1, -1, -1, -1, 194, 205, 210, 221, 226, 237, 242, 253, -1, -1, -1, -1, -1, -1, -1, -1, 450, 461, 466, 477, 482, 493, 498, 509,-1, -1, -1, -1, -1, -1, -1, -1, 195, 204, 211, 220, 227, 236, 243, 252, -1, -1, -1, -1, -1, -1, -1, -1, 451, 460, 467, 476, 483, 492, 499, 508,
-1, -1, -1, -1, -1, -1, -1, -1, 196, 203, 212, 219, 228, 235, 244, 251, -1, -1, -1, - 1, -1, -1, -1, -1, 452, 459, 468, 475, 484, 491, 500, 507, -1, -1, -1, -1, -1, -1, -1 , -1, 197, 202, 213, 218, 229, 234, 245, 250, -1, -1, -1, -1, -1, -1, -1, -1, 453, 458, 469, 474, 485, 490, 501, 506, -1, -1, -1, -1, -1, -1, -1, -1, 198, 201, 214, 217, 230, 233, 246, 249, -1, -1, -1, -1, -1, -1, -1, -1, 454, 457, 470, 473, 486, 489, 502, 505, -1, -1, -1, - 1, -1, -1, -1, -1, 199, 200, 215, 216, 231, 232, 247, 248, -1, -1, -1, -1, -1, -1, -1 , -1, 455, 456, 471, 472, 487, 488, 503, 504,};
Lo sto usando in questo modo:
#define PIN 6 # define WIDTH 32 // Finora. Sarà 56 quando finisco di creare l'array. # Define HEIGHT 32 / ** * Imposta la matrice lightwall. * * Ogni pannello è 8x8 pixel. Ci sono 7 colonne e 2 righe, * ma sono disposte secondo uno schema a scacchiera. * / Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix (WIDTH, HEIGHT, PIN, NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRBW + NEO_KHZ800); x16_Yt_t return grid [y];} void setup () {matrix.setRemapFunction (remapXY); matrix.begin ();}
Quindi remapXY ()
restituisce la chiave corretta dell'array, quindi il motivo del folle array incollato sopra. E quell'array è completo solo a metà (scriverlo noiosamente!)
Ma finora funziona. Ho un'animazione di Pacman (non raffigurata) che scorre sullo schermo ed è "fuori dallo schermo" per un periodo di tempo credibile. Questo è il punto centrale di questa follia. Ma sto andando tutto male? In allegato è anche un'immagine della matrice visibile completa per un aiuto visivo.
A partire dall'angolo in alto a sinistra c'è il pannello 1, quindi in basso pannello sinistro 2. La colonna successiva in alto è il pannello 3, il pannello inferiore 4. E così via.
Quindi avrò bisogno di più RAM affinché funzioni? O c'è un modo migliore per codificare la mia via d'uscita da questo problema? Ho in programma molte animazioni ed effetti ambientali, non tutti richiederanno rigorosamente questo offset.
C'è un altro modo per "mascherare" o ritardare temporaneamente alcuni pixel fuori dallo schermo in base a dove dovrebbero essere? Solo per rimetterli al loro posto in seguito?