Merge pull request #108 from bobbycar-graz/stvo
Street light update and added a few new animations
This commit is contained in:
@ -160,6 +160,12 @@ struct BigOffsetAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &ge
|
|||||||
struct DeziampereAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.ledstrip.deziampere; } };
|
struct DeziampereAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.ledstrip.deziampere; } };
|
||||||
struct EnableBeepWhenBlinkAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableBeepWhenBlink; } };
|
struct EnableBeepWhenBlinkAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableBeepWhenBlink; } };
|
||||||
struct EnableFullBlinkAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableFullBlink; } };
|
struct EnableFullBlinkAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableFullBlink; } };
|
||||||
|
struct EnableLedstripStVOAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableStVO; } };
|
||||||
|
struct LedsStVOFrontOffsetAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.ledstrip.stvoFrontOffset; } };
|
||||||
|
struct LedsStVOFrontLengthAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.ledstrip.stvoFrontLength; } };
|
||||||
|
struct EnableLedstripStVOFrontlight : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.stvoFrontEnable; } };
|
||||||
|
struct AnimationMultiplierAccessor : public RefAccessorSaveSettings<int16_t> { int16_t &getRef() const override { return settings.ledstrip.animationMultiplier; } };
|
||||||
|
struct LedstripBrightnessAccessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.ledstrip.brightness; } };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } };
|
struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } };
|
||||||
|
@ -68,6 +68,38 @@ using DeziampereChangeScreen = makeComponent<
|
|||||||
SwitchScreenAction<LedstripMenu>
|
SwitchScreenAction<LedstripMenu>
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
using StVOOffsetChangeScreen = makeComponent<
|
||||||
|
ChangeValueDisplay<int16_t>,
|
||||||
|
StaticText<TEXT_STVO_FRONTOFFSET>,
|
||||||
|
LedsStVOFrontOffsetAccessor,
|
||||||
|
BackActionInterface<SwitchScreenAction<LedstripMenu>>,
|
||||||
|
SwitchScreenAction<LedstripMenu>
|
||||||
|
>;
|
||||||
|
|
||||||
|
using StVOLengthChangeScreen = makeComponent<
|
||||||
|
ChangeValueDisplay<int16_t>,
|
||||||
|
StaticText<TEXT_STVO_FRONTLENGTH>,
|
||||||
|
LedsStVOFrontLengthAccessor,
|
||||||
|
BackActionInterface<SwitchScreenAction<LedstripMenu>>,
|
||||||
|
SwitchScreenAction<LedstripMenu>
|
||||||
|
>;
|
||||||
|
|
||||||
|
using animationMultiplierChangeScreen = makeComponent<
|
||||||
|
ChangeValueDisplay<int16_t>,
|
||||||
|
StaticText<TEXT_ANIMATION_MULTIPLIER>,
|
||||||
|
AnimationMultiplierAccessor,
|
||||||
|
BackActionInterface<SwitchScreenAction<LedstripMenu>>,
|
||||||
|
SwitchScreenAction<LedstripMenu>
|
||||||
|
>;
|
||||||
|
|
||||||
|
using ledstripBrightnessChangeScreen = makeComponent<
|
||||||
|
ChangeValueDisplay<uint8_t>,
|
||||||
|
StaticText<TEXT_LEDSTRIP_BRIGHTNESS>,
|
||||||
|
LedstripBrightnessAccessor,
|
||||||
|
BackActionInterface<SwitchScreenAction<LedstripMenu>>,
|
||||||
|
SwitchScreenAction<LedstripMenu>
|
||||||
|
>;
|
||||||
|
|
||||||
class LedstripMenu :
|
class LedstripMenu :
|
||||||
public MenuDisplay,
|
public MenuDisplay,
|
||||||
public StaticText<TEXT_LEDSTRIP>,
|
public StaticText<TEXT_LEDSTRIP>,
|
||||||
@ -80,12 +112,19 @@ public:
|
|||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BRAKELIGHTS>, ToggleBoolAction, CheckboxIcon, EnableBrakeLightsAccessor>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BRAKELIGHTS>, ToggleBoolAction, CheckboxIcon, EnableBrakeLightsAccessor>>();
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BLINKBEEP>, ToggleBoolAction, CheckboxIcon, EnableBeepWhenBlinkAccessor>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BLINKBEEP>, ToggleBoolAction, CheckboxIcon, EnableBeepWhenBlinkAccessor>>();
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FULLBLINK>, ToggleBoolAction, CheckboxIcon, EnableFullBlinkAccessor>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_FULLBLINK>, ToggleBoolAction, CheckboxIcon, EnableFullBlinkAccessor>>();
|
||||||
|
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP_STVO>, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOAccessor>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_STVO_FRONTOFFSET, LedsStVOFrontOffsetAccessor>, SwitchScreenAction<StVOOffsetChangeScreen>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_STVO_FRONTLENGTH, LedsStVOFrontLengthAccessor>, SwitchScreenAction<StVOLengthChangeScreen>>>();
|
||||||
|
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTANIMATION>, SwitchScreenAction<LedstripSelectAnimationMenu>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTANIMATION>, SwitchScreenAction<LedstripSelectAnimationMenu>>>();
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BLINKANIMATION>, SwitchScreenAction<LedstripSelectBlinkMenu>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BLINKANIMATION>, SwitchScreenAction<LedstripSelectBlinkMenu>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_MULTIPLIER>, SwitchScreenAction<animationMultiplierChangeScreen>>>();
|
||||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_LEDSCOUNT, LedsCountAccessor>, SwitchScreenAction<LedsCountChangeScreen>>>(); }
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_LEDSCOUNT, LedsCountAccessor>, SwitchScreenAction<LedsCountChangeScreen>>>(); }
|
||||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CENTEROFFSET, CenterOffsetAccessor>, SwitchScreenAction<CenterOffsetChangeScreen>>>(); }
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CENTEROFFSET, CenterOffsetAccessor>, SwitchScreenAction<CenterOffsetChangeScreen>>>(); }
|
||||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMALLOFFSET, SmallOffsetAccessor>, SwitchScreenAction<SmallOffsetChangeScreen>>>(); }
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMALLOFFSET, SmallOffsetAccessor>, SwitchScreenAction<SmallOffsetChangeScreen>>>(); }
|
||||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BIGOFFSET, BigOffsetAccessor>, SwitchScreenAction<BigOffsetChangeScreen>>>(); }
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BIGOFFSET, BigOffsetAccessor>, SwitchScreenAction<BigOffsetChangeScreen>>>(); }
|
||||||
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP_BRIGHTNESS>, SwitchScreenAction<ledstripBrightnessChangeScreen>>>(); }
|
||||||
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_LEDSTRIP_MILLIAMP, DeziampereAccessor>, SwitchScreenAction<DeziampereChangeScreen>>>(); }
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_LEDSTRIP_MILLIAMP, DeziampereAccessor>, SwitchScreenAction<DeziampereChangeScreen>>>(); }
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#define FEATURE_LEDSTRIP
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
// 3rdparty lib includes
|
// 3rdparty lib includes
|
||||||
#include <FastLED.h>
|
#include <FastLED.h>
|
||||||
@ -121,7 +122,30 @@ void updateLedStrip()
|
|||||||
}
|
}
|
||||||
else if ((cpputils::is_in(blinkAnimation, LEDSTRIP_OVERWRITE_BLINKLEFT, LEDSTRIP_OVERWRITE_BLINKRIGHT, LEDSTRIP_OVERWRITE_BLINKBOTH)) && settings.ledstrip.enableBeepWhenBlink) have_disabled_beeper = false;
|
else if ((cpputils::is_in(blinkAnimation, LEDSTRIP_OVERWRITE_BLINKLEFT, LEDSTRIP_OVERWRITE_BLINKRIGHT, LEDSTRIP_OVERWRITE_BLINKBOTH)) && settings.ledstrip.enableBeepWhenBlink) have_disabled_beeper = false;
|
||||||
|
|
||||||
|
if (simplified || settings.ledstrip.enableStVO)
|
||||||
|
{
|
||||||
|
const auto center = (std::begin(leds) + (leds.size() / 2) + settings.ledstrip.centerOffset);
|
||||||
|
|
||||||
|
if (!(blinkAnimation == LEDSTRIP_OVERWRITE_BLINKLEFT || blinkAnimation == LEDSTRIP_OVERWRITE_BLINKBOTH) || !(espchrono::millis_clock::now().time_since_epoch() % 750ms < 375ms) || settings.ledstrip.enableFullBlink) // Condition for right
|
||||||
|
{
|
||||||
|
std::fill(center - settings.ledstrip.bigOffset, center - settings.ledstrip.smallOffset, CRGB{0, 0, 0});
|
||||||
|
std::fill(center - settings.ledstrip.bigOffset - 1U, center - settings.ledstrip.smallOffset - 1U, CRGB{255, 0, 0}); // Right
|
||||||
|
}
|
||||||
|
if (!(blinkAnimation == LEDSTRIP_OVERWRITE_BLINKRIGHT || blinkAnimation == LEDSTRIP_OVERWRITE_BLINKBOTH) || !(espchrono::millis_clock::now().time_since_epoch() % 750ms < 375ms) || settings.ledstrip.enableFullBlink) // Condition for left
|
||||||
|
{
|
||||||
|
std::fill(center + settings.ledstrip.smallOffset, center + settings.ledstrip.bigOffset, CRGB{0, 0, 0});
|
||||||
|
std::fill(center + settings.ledstrip.smallOffset + 1U, center + settings.ledstrip.bigOffset + 1U, CRGB{255, 0, 0}); // Left
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.ledstrip.stvoFrontEnable)
|
||||||
|
{
|
||||||
|
std::fill(std::begin(leds) + settings.ledstrip.stvoFrontOffset, std::begin(leds) + settings.ledstrip.stvoFrontOffset + settings.ledstrip.stvoFrontLength, CRGB{255, 255, 255});
|
||||||
|
std::fill(std::end(leds) - settings.ledstrip.stvoFrontOffset - settings.ledstrip.stvoFrontLength, std::end(leds) - settings.ledstrip.stvoFrontOffset, CRGB{255, 255, 255});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FastLED.setMaxPowerInVoltsAndMilliamps(5,settings.ledstrip.deziampere * 100);
|
FastLED.setMaxPowerInVoltsAndMilliamps(5,settings.ledstrip.deziampere * 100);
|
||||||
|
FastLED.setBrightness(settings.ledstrip.brightness);
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +199,7 @@ void showSpeedSyncAnimation() {
|
|||||||
|
|
||||||
static float hue_result = 0;
|
static float hue_result = 0;
|
||||||
|
|
||||||
const float hue_per_led = .1;
|
const float hue_per_led = 1. / std::max(uint8_t(1), uint8_t(settings.ledstrip.animationMultiplier));
|
||||||
const float meter_per_second = avgSpeedKmh / 3.6;
|
const float meter_per_second = avgSpeedKmh / 3.6;
|
||||||
const float leds_per_second = meter_per_second * leds_per_meter;
|
const float leds_per_second = meter_per_second * leds_per_meter;
|
||||||
const float hue_per_second = leds_per_second * hue_per_led;
|
const float hue_per_second = leds_per_second * hue_per_led;
|
||||||
|
@ -238,7 +238,13 @@ constexpr Settings::Ledstrip defaultLedstrip {
|
|||||||
#else
|
#else
|
||||||
.animationType = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW,
|
.animationType = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW,
|
||||||
#endif
|
#endif
|
||||||
.enableFullBlink = false
|
.enableFullBlink = false,
|
||||||
|
.enableStVO = false,
|
||||||
|
.stvoFrontOffset = 0,
|
||||||
|
.stvoFrontLength = 10,
|
||||||
|
.stvoFrontEnable = false,
|
||||||
|
.animationMultiplier = 10,
|
||||||
|
.brightness = 255
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -163,6 +163,12 @@ struct Settings
|
|||||||
bool enableBeepWhenBlink;
|
bool enableBeepWhenBlink;
|
||||||
int16_t animationType;
|
int16_t animationType;
|
||||||
bool enableFullBlink;
|
bool enableFullBlink;
|
||||||
|
bool enableStVO;
|
||||||
|
int16_t stvoFrontOffset;
|
||||||
|
int16_t stvoFrontLength;
|
||||||
|
bool stvoFrontEnable;
|
||||||
|
int16_t animationMultiplier;
|
||||||
|
uint8_t brightness;
|
||||||
} ledstrip;
|
} ledstrip;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -265,6 +271,12 @@ void Settings::executeForEveryCommonSetting(T &&callable)
|
|||||||
callable("beeppwhenblink", ledstrip.enableBeepWhenBlink);
|
callable("beeppwhenblink", ledstrip.enableBeepWhenBlink);
|
||||||
// callable("animationType", ledstrip.animationType);
|
// callable("animationType", ledstrip.animationType);
|
||||||
callable("fullblink", ledstrip.enableFullBlink);
|
callable("fullblink", ledstrip.enableFullBlink);
|
||||||
|
callable("ledstvo", ledstrip.enableStVO);
|
||||||
|
callable("ledstvofoff", ledstrip.stvoFrontOffset);
|
||||||
|
callable("ledstvoflen", ledstrip.stvoFrontLength);
|
||||||
|
callable("ledstvoen", ledstrip.stvoFrontEnable);
|
||||||
|
callable("ledAnimMultiplier", ledstrip.animationMultiplier);
|
||||||
|
callable("ledbrightness", ledstrip.brightness);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
callable("lockAlwPresetSw", lockscreen.allowPresetSwitch);
|
callable("lockAlwPresetSw", lockscreen.allowPresetSwitch);
|
||||||
|
@ -17,6 +17,7 @@ void switchProfile(uint8_t index)
|
|||||||
if (index == SIMPLIFIED_TRIGGER_TRIGGERONPRESET)
|
if (index == SIMPLIFIED_TRIGGER_TRIGGERONPRESET)
|
||||||
{
|
{
|
||||||
simplified = true;
|
simplified = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -251,6 +251,12 @@ constexpr char TEXT_BIGOFFSET[] = "Big Offset";
|
|||||||
constexpr char TEXT_LEDSTRIP_MILLIAMP[] = "Ledstrip 0.1A";
|
constexpr char TEXT_LEDSTRIP_MILLIAMP[] = "Ledstrip 0.1A";
|
||||||
constexpr char TEXT_BLINKBEEP[] = "Blink Beep";
|
constexpr char TEXT_BLINKBEEP[] = "Blink Beep";
|
||||||
constexpr char TEXT_FULLBLINK[] = "Full blink";
|
constexpr char TEXT_FULLBLINK[] = "Full blink";
|
||||||
|
constexpr char TEXT_LEDSTRIP_STVO[] = "Enable StVO";
|
||||||
|
constexpr char TEXT_STVO_FRONTOFFSET[] = "StVO Front Offset";
|
||||||
|
constexpr char TEXT_STVO_FRONTLENGTH[] = "StVO Front Length";
|
||||||
|
constexpr char TEXT_STVO_ENABLEFRONTLIGHT[] = "StVO Front Enable";
|
||||||
|
constexpr char TEXT_ANIMATION_MULTIPLIER[] = "Animation Multiplier";
|
||||||
|
constexpr char TEXT_LEDSTRIP_BRIGHTNESS[] = "Ledstrip Brightness";
|
||||||
//constexpr char TEXT_BACK[] = "Back";
|
//constexpr char TEXT_BACK[] = "Back";
|
||||||
|
|
||||||
//LedstripSelectAnimationMenu
|
//LedstripSelectAnimationMenu
|
||||||
|
Reference in New Issue
Block a user