67 lines
2.2 KiB
YAML
67 lines
2.2 KiB
YAML
# ===== LED Bar (WS2812B) =====
|
|
light:
|
|
- platform: esp32_rmt_led_strip
|
|
id: led_bar
|
|
chipset: WS2812
|
|
rgb_order: GRB
|
|
pin: ${led_pin}
|
|
num_leds: ${led_num_leds}
|
|
name: "Voice Satellite LEDs"
|
|
default_transition_length: 200ms
|
|
effects:
|
|
- addressable_lambda:
|
|
name: "Idle Breathe"
|
|
update_interval: 50ms
|
|
lambda: |-
|
|
static float brightness = 0;
|
|
static int direction = 1;
|
|
brightness += direction * 0.02;
|
|
if (brightness >= 1.0) { brightness = 1.0; direction = -1; }
|
|
if (brightness <= 0.1) { brightness = 0.1; direction = 1; }
|
|
for (int i = 0; i < it.size(); i++) {
|
|
it[i] = Color(0, 0, (int)(40 * brightness));
|
|
}
|
|
- addressable_lambda:
|
|
name: "Listening Pulse"
|
|
update_interval: 30ms
|
|
lambda: |-
|
|
static int pos = 0;
|
|
pos = (pos + 1) % (it.size() * 2);
|
|
for (int i = 0; i < it.size(); i++) {
|
|
int dist = abs(pos - i);
|
|
if (pos >= it.size()) dist = abs((it.size() * 2 - pos) - i);
|
|
int bright = max(0, 255 - dist * 60);
|
|
it[i] = Color(0, bright, bright);
|
|
}
|
|
- addressable_lambda:
|
|
name: "Processing"
|
|
update_interval: 80ms
|
|
lambda: |-
|
|
static int offset = 0;
|
|
offset = (offset + 1) % it.size();
|
|
for (int i = 0; i < it.size(); i++) {
|
|
if ((i + offset) % 2 == 0) {
|
|
it[i] = Color(80, 0, 180);
|
|
} else {
|
|
it[i] = Color(0, 0, 0);
|
|
}
|
|
}
|
|
- addressable_lambda:
|
|
name: "Speaking"
|
|
update_interval: 40ms
|
|
lambda: |-
|
|
static int wave = 0;
|
|
wave = (wave + 1) % 16;
|
|
for (int i = 0; i < it.size(); i++) {
|
|
int bright = (sin((wave + i * 2) * 0.4) + 1) * 127;
|
|
it[i] = Color(0, bright, 0);
|
|
}
|
|
- addressable_lambda:
|
|
name: "Error Flash"
|
|
update_interval: 100ms
|
|
lambda: |-
|
|
static bool on = false;
|
|
on = !on;
|
|
for (int i = 0; i < it.size(); i++) {
|
|
it[i] = on ? Color(255, 0, 0) : Color(0, 0, 0);
|
|
} |