From 715aca3365007dcd15914ed5527f1c5ec520fd31 Mon Sep 17 00:00:00 2001 From: Ashley Strahle Date: Tue, 23 Jun 2026 14:47:48 +0000 Subject: [PATCH] Fix rawled: GRB RED={0x00,0xFF,0x00}, differentiate 0/1 bit timing --- src/main.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 67816ae..ac1749a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -125,29 +125,26 @@ void handle_serial_command(const String& cmd) { } else if (cmd == "rawled") { uint8_t pin = 9; Serial.println("[CMD] Bit-bang WS2812: pixel 0 = RED on GPIO 9"); - uint32_t colour = 0x00FF00; + uint8_t colour[] = {0x00, 0xFF, 0x00}; noInterrupts(); - for (int i = 0; i < 24; i++) { - if (colour & (1 << (23 - i))) { - digitalWrite(pin, HIGH); - esp_rom_delay_us(800); - digitalWrite(pin, LOW); - esp_rom_delay_us(450); - } else { - digitalWrite(pin, HIGH); - esp_rom_delay_us(400); - digitalWrite(pin, LOW); - esp_rom_delay_us(850); + for (int byte_idx = 0; byte_idx < 3; byte_idx++) { + uint8_t val = colour[byte_idx]; + for (int bit = 7; bit >= 0; bit--) { + gpio_set_level((gpio_num_t)pin, 1); + if (val & (1 << bit)) { + esp_rom_delay_us(1); + } + gpio_set_level((gpio_num_t)pin, 0); + if (!(val & (1 << bit))) { + esp_rom_delay_us(1); + } } } - for (int i = 0; i < 7; i++) { - digitalWrite(pin, LOW); - esp_rom_delay_us(50); - } + gpio_set_level((gpio_num_t)pin, 0); + esp_rom_delay_us(50); interrupts(); Serial.println("[CMD] Sent. Wait 2 sec..."); delay(2000); - digitalWrite(pin, LOW); Serial.println("[CMD] Done"); } else { Serial.println("[CMD] Unknown command. Type 'help'");