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