If the code hasn't been touched in this long, its probably release-worthy.
This commit is contained in:
54
src/animations/Power.h
Normal file
54
src/animations/Power.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#pragma once
|
||||
#include <Figments.h>
|
||||
|
||||
template<uint8_t MaxBrightness = 255, uint32_t MaxMilliAmps = 500, uint32_t Voltage = 5>
|
||||
class Power: public Figment {
|
||||
public:
|
||||
Power() : Figment("Power") {}
|
||||
|
||||
void handleEvent(const InputEvent& evt) override {
|
||||
switch (evt.intent) {
|
||||
case InputEvent::PowerToggle:
|
||||
m_powerState = m_powerState.value() <= 128 ? 255 : 0;
|
||||
//Log.info("POWER TOGGLE %d", m_powerState.value());
|
||||
break;
|
||||
case InputEvent::SetPower:
|
||||
m_powerState = evt.asInt() == 0 ? 0 : 255;
|
||||
Log.notice("Power is now %d", m_powerState);
|
||||
break;
|
||||
case InputEvent::SetBrightness:
|
||||
m_brightness = evt.asInt();
|
||||
m_brightness = 255;
|
||||
break;
|
||||
case InputEvent::Beat:
|
||||
m_beatDecay.set(0, 255);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void loop() override {
|
||||
m_powerState.update();
|
||||
m_brightness.update();
|
||||
EVERY_N_MILLISECONDS(20) {
|
||||
m_beatDecay.update(13);
|
||||
}
|
||||
}
|
||||
|
||||
void render(Display* dpy) const override {
|
||||
const uint8_t decayedBrightness = scale8((uint8_t)m_brightness, ease8InOutCubic((uint8_t)m_beatDecay));
|
||||
const uint8_t clippedBrightness = std::min(decayedBrightness, MaxBrightness);
|
||||
const uint8_t scaledBrightness = scale8(m_powerState, clippedBrightness);
|
||||
const uint8_t videoBrightness = brighten8_video(scaledBrightness);
|
||||
const uint8_t powerBrightness = calculate_max_brightness_for_power_mW(videoBrightness, Watts);
|
||||
FastLED.setBrightness(powerBrightness);
|
||||
}
|
||||
|
||||
static constexpr uint32_t Watts = Voltage * MaxMilliAmps;
|
||||
|
||||
private:
|
||||
AnimatedNumber m_powerState = 255;
|
||||
AnimatedNumber m_brightness = MaxBrightness;
|
||||
AnimatedNumber m_beatDecay = 255;
|
||||
};
|
Reference in New Issue
Block a user