#line 1 "/media/sam/8294CD2994CD2111/Users/Dell/Documents/Arduino/voice_assistant/led_control.h" #pragma once #include #include "config.h" // Initialize (LED_COUNT, LED_PIN, CHANNEL, TYPE) // Channel 0 is fine. Freenove_ESP32_WS2812 strip(NUM_LEDS, LED_PIN, 0, TYPE_GRB); enum DeviceState { STATE_IDLE, STATE_WAKE_DETECTED, STATE_RECORDING, STATE_TRANSMITTING, STATE_ACK_RECEIVED, STATE_ERROR }; DeviceState currentState = STATE_IDLE; unsigned long stateTimer = 0; void setupLEDs() { strip.begin(); strip.setBrightness(30); strip.show(); // Off } // Helper for Color compatibility uint32_t Color(uint8_t r, uint8_t g, uint8_t b) { return strip.Wheel((r << 16) | (g << 8) | b); // Not used by this lib but keeps API } void setRingColor(uint32_t r, uint8_t g, uint8_t b) { strip.setAllLedsColor(r, g, b); } // Overload for compatibility with previous code calling Color() // We actually just need to rewrite the helper slightly void setRingColor(uint32_t color) { // Extract RGB from 32-bit int uint8_t r = (uint8_t)(color >> 16); uint8_t g = (uint8_t)(color >> 8); uint8_t b = (uint8_t)color; strip.setAllLedsColor(r, g, b); } void updateLEDs() { switch (currentState) { case STATE_IDLE: strip.setAllLedsColor(0, 0, 0); break; case STATE_WAKE_DETECTED: strip.setAllLedsColor(255, 0, 0); break; case STATE_RECORDING: strip.setAllLedsColor(0, 255, 0); break; case STATE_TRANSMITTING: strip.setAllLedsColor(0, 0, 255); break; case STATE_ERROR: strip.setAllLedsColor(255, 255, 255); break; case STATE_ACK_RECEIVED: // Simple rainbow for (int j = 0; j < 255; j += 2) { for (int i = 0; i < NUM_LEDS; i++) { strip.setLedColorData(i, strip.Wheel((i * 256 / NUM_LEDS + j) & 255)); } strip.show(); delay(10); } currentState = STATE_IDLE; break; } }