voice_assistant/build/sketch/led_control.h

77 lines
1.9 KiB
C

#line 1 "/media/sam/8294CD2994CD2111/Users/Dell/Documents/Arduino/voice_assistant/led_control.h"
#pragma once
#include <Freenove_WS2812_Lib_for_ESP32.h>
#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;
}
}