FastLED 3.9.15
Loading...
Searching...
No Matches

◆ setup()

void setup ( )

Definition at line 62 of file ElPanelReactive.ino.

62 {
63 Serial.begin(115200);
64 initPanels();
65
66 auto audio = FastLED.add(audio_ui);
67 if (audio) {
68 audio->onSilence([&](u8 silent) {
69 isSilent = (silent != 0);
70 if (isSilent) {
71 filterHigh.reset();
72 filterLow.reset();
73 }
74 });
75
76 audio->onVibeLevels(
77 [&](const fl::audio::detector::VibeLevels &levels) {
78 if (isSilent) return;
80
81 // Vibe's self-normalizing bass: ~1.0 = average level.
82 // Subtract 1.0 so silence/average → 0, beats → positive.
83 float signal = (levels.bass - 1.0f) * sensitivity.value();
84 signal = fl::clamp(signal, 0.0f, 1.0f);
85
86 uint32_t now = millis();
87 float dt = (now - lastMillis) / 1000.0f;
88 lastMillis = now;
89
90 // Apply UI-driven attack/decay settings
91 filterHigh.setAttackTau(attack1.value());
92 filterHigh.setDecayTau(decay1.value());
93 filterLow.setAttackTau(attack2.value());
94 filterLow.setDecayTau(decay2.value());
95
96 // Per-panel thresholds keep staggered levels.
97 // Remap [threshold..1] → [0..1], clamped.
98 float t1 = threshold1.value();
99 float sig1 = fl::map_range_clamped(signal, t1, 1.0f, 0.0f, 1.0f);
100
101 float t2 = threshold2.value();
102 float sig2 = fl::map_range_clamped(signal, t2, 1.0f, 0.0f, 1.0f);
103
104 // Panel 1: stronger signal (squared for contrast)
105 filterHigh.update(sig1 * sig1, dt);
106 // Panel 2: more responsive (linear)
107 filterLow.update(sig2, dt);
108 });
109 }
110}
fl::UIAudio audio("Audio Input")
static uint32_t lastAudioMs
fl::UISlider threshold2("Threshold", 0.94f, 0.0f, 1.0f, 0.01f)
fl::UISlider attack2("Attack", 0.081f, 0.001f, 0.5f, 0.005f)
static fl::AttackDecayFilter< float > filterHigh(0.081f, 0.3f)
static fl::AttackDecayFilter< float > filterLow(0.081f, 0.3f)
static bool isSilent
fl::UISlider decay1("Decay", 0.3f, 0.01f, 1.0f, 0.01f)
fl::UISlider sensitivity("Sensitivity", 1.5f, 0.3f, 4.0f, 0.1f)
fl::UIAudio audio_ui("Audio Input")
fl::UISlider threshold1("Threshold", 0.54f, 0.0f, 1.0f, 0.01f)
fl::UISlider decay2("Decay", 0.3f, 0.01f, 1.0f, 0.01f)
static uint32_t lastMillis
fl::UISlider attack1("Attack", 0.081f, 0.001f, 0.5f, 0.005f)
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
void initPanels()
Definition el_panel.cpp:44
unsigned char u8
Definition stdint.h:131
fl::u32 uint32_t
Definition s16x16x4.h:219
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
FASTLED_FORCE_INLINE U map_range_clamped(T value, T in_min, T in_max, U out_min, U out_max) FL_NOEXCEPT
Definition math.h:186
constexpr enable_if< is_fixed_point< T >::value, T >::type clamp(T x, T lo, T hi) FL_NOEXCEPT
#define Serial
Definition serial.h:304

References attack1, attack2, audio, audio_ui, fl::audio::detector::VibeLevels::bass, fl::clamp(), decay1, decay2, FastLED, filterHigh, filterLow, initPanels(), isSilent, lastAudioMs, lastMillis, fl::map_range_clamped(), sensitivity, Serial, threshold1, and threshold2.

+ Here is the call graph for this function: