AwesomeStudioPedal
A programmable, multi-profile foot controller for DAWs, score readers, and studio automation
Loading...
Searching...
No Matches
nrf52840/src/led_controller.cpp
Go to the documentation of this file.
1#include "led_controller.h"
2
3LEDController::LEDController(uint8_t pin) : pin(pin) {}
4
5void LEDController::setup(uint32_t initialState)
6{
7 pinMode(pin, OUTPUT);
8 setState(initialState != 0);
9}
10
11void LEDController::setState(bool state)
12{
13 if (currentState != state)
14 {
15 digitalWrite(pin, state ? HIGH : LOW);
16 currentState = state;
17 }
18}
19
20void LEDController::toggle() { setState(! currentState); }
21
22void LEDController::startBlink(uint32_t intervalMs, int16_t count)
23{
24 if (blinking)
25 return;
26 stateBeforeBlink = currentState;
27 blinkInterval = intervalMs;
28 blinkRemaining = (count < 0) ? -1 : static_cast<int16_t>(count * 2);
29 blinking = true;
30 lastToggleTime = 0;
31}
32
34{
35 if (! blinking)
36 return;
37 blinking = false;
38 setState(stateBeforeBlink);
39}
40
41void LEDController::update(uint32_t now)
42{
43 if (! blinking)
44 return;
45 if (lastToggleTime == 0)
46 {
47 lastToggleTime = now;
48 setState(true);
49 return;
50 }
51 if (now - lastToggleTime < blinkInterval)
52 return;
53 lastToggleTime = now;
54 toggle();
55 if (blinkRemaining > 0)
56 {
57 blinkRemaining--;
58 if (blinkRemaining == 0)
59 stopBlink();
60 }
61}
void setup(uint32_t initialState=0) override
void update(uint32_t now) override
Drive timed behaviour — must be called every loop iteration.
void setState(bool state) override
void startBlink(uint32_t intervalMs, int16_t count=-1) override
Start a blink sequence.
void stopBlink() override
Stop any running blink and restore the pre-blink state.