From f1cf19b110668c604f004e3790f40a4e2e5cd73d Mon Sep 17 00:00:00 2001 From: Victor Gomes Date: Wed, 12 Feb 2025 21:27:47 -0300 Subject: [PATCH] =?UTF-8?q?Corrige=20erro=20de=20cor=20e=20brilho=20dos=20?= =?UTF-8?q?LEDs=20da=20matriz=20aplicando=20a=20revers=C3=A3o=20de=20byte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- neopixel_pio/neopixel_pio.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/neopixel_pio/neopixel_pio.c b/neopixel_pio/neopixel_pio.c index d0d2429..8356e1a 100644 --- a/neopixel_pio/neopixel_pio.c +++ b/neopixel_pio/neopixel_pio.c @@ -24,6 +24,25 @@ npLED_t leds[LED_COUNT]; PIO np_pio; uint sm; +/** + * Reverte a ordem de um byte LSB -> MSB e sucessivamente. + * @param b o byte a ser revertido + */ +uint8_t reverse_byte(uint8_t b) { + uint8_t reversed = 0; // Inicializa o byte a ser revertido + + // Faz a reversão bit a bit seguindo a lógica: + // 1. Captura o i-ésimo bit do byte original ((b >> i) & 0x1) + // 2. Envia-o para a variável reversed com o operador | + // 3. Arrasta o bit transferido para a esquerda (reversed << 1) + for (uint8_t i = 0; i < 8; i++) { + reversed = reversed << 1; // + reversed = (reversed | ((b >> i) & 0x1)); + } + + return reversed; +} + /** * Inicializa a máquina PIO para controle da matriz de LEDs. */ @@ -55,9 +74,13 @@ void npInit(uint pin) { * Atribui uma cor RGB a um LED. */ void npSetLED(const uint index, const uint8_t r, const uint8_t g, const uint8_t b) { - leds[index].R = r; - leds[index].G = g; - leds[index].B = b; + uint8_t reversed_r = reverse_byte(r); + uint8_t reversed_g = reverse_byte(g); + uint8_t reversed_b = reverse_byte(b); + + leds[index].R = reversed_r; + leds[index].G = reversed_g; + leds[index].B = reversed_b; } /**