cs-midi/MIDI_Outputs/Abstract/MIDIButton.hpp

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