40 lines
1.0 KiB
C++
40 lines
1.0 KiB
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 MIDIButton : public MIDIOutputElement {
|
|
public:
|
|
MIDIButton(pin_t pin, MIDIAddress address, const Sender &sender)
|
|
: button(pin), address(address), sender(sender) {}
|
|
|
|
void begin() override { button.begin(); }
|
|
void update() override {
|
|
AH::Button::State state = button.update();
|
|
if (state == AH::Button::Falling) {
|
|
sender.sendOn(address);
|
|
} else if (state == AH::Button::Rising) {
|
|
sender.sendOff(address);
|
|
}
|
|
}
|
|
|
|
void invert() { button.invert(); }
|
|
AH::Button::State getButtonState() const { return button.getState(); }
|
|
|
|
MIDIAddress getAddress() const { return this->address; }
|
|
void setAddressUnsafe(MIDIAddress address) { this->address = address; }
|
|
|
|
private:
|
|
AH::Button button;
|
|
MIDIAddress address;
|
|
|
|
public:
|
|
Sender sender;
|
|
};
|
|
|
|
END_CS_NAMESPACE
|