#pragma once #include #include #include BEGIN_CS_NAMESPACE template 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