39 lines
994 B
C++
39 lines
994 B
C++
#pragma once
|
|
|
|
#include <AH/Hardware/Button.hpp>
|
|
#include <Def/Def.hpp>
|
|
#include <MIDI_Outputs/Abstract/MIDIOutputElement.hpp>
|
|
|
|
BEGIN_CS_NAMESPACE
|
|
|
|
template <class Sender>
|
|
class MIDIButtonLatching : public MIDIOutputElement {
|
|
protected:
|
|
MIDIButtonLatching(pin_t pin, MIDIAddress address, const Sender &sender)
|
|
: button(pin), address(address), sender(sender) {}
|
|
|
|
public:
|
|
void begin() override { button.begin(); }
|
|
void update() override {
|
|
AH::Button::State state = button.update();
|
|
if (state == AH::Button::Falling || state == AH::Button::Rising) {
|
|
sender.sendOn(address);
|
|
sender.sendOff(address);
|
|
}
|
|
}
|
|
|
|
AH::Button::State getButtonState() const { return button.getState(); }
|
|
|
|
MIDIAddress getAddress() const { return this->address; }
|
|
void setAddress(MIDIAddress address) { this->address = address; }
|
|
|
|
private:
|
|
AH::Button button;
|
|
MIDIAddress address;
|
|
|
|
public:
|
|
Sender sender;
|
|
};
|
|
|
|
END_CS_NAMESPACE
|