Line data Source code
1 : #pragma once 2 : 3 : #include <MIDI_Outputs/Abstract/MIDIButtonLatching.hpp> 4 : #include <MIDI_Senders/DigitalNoteSender.hpp> 5 : 6 : BEGIN_CS_NAMESPACE 7 : 8 : /** 9 : * @brief A class of MIDIOutputElement%s that read the input of a **latching 10 : * push button or toggle switch**, and send out MIDI **Note** events. 11 : * 12 : * When the switch changes state, two MIDI Note events are sent: first 13 : * a Note On event, followed immediately by a Note Off event. 14 : * The switch is debounced in software. 15 : * This version cannot be banked. 16 : * 17 : * @ingroup MIDIOutputElements 18 : */ 19 2 : class NoteButtonLatching : public MIDIButtonLatching<DigitalNoteSender> { 20 : public: 21 : /** 22 : * @brief Create a new NoteButtonLatching object with the given pin, note 23 : * number and channel. 24 : * 25 : * @param pin 26 : * The digital input pin to read from. 27 : * The internal pull-up resistor will be enabled. 28 : * @param address 29 : * The MIDI address containing the note number [0, 127], 30 : * channel [CHANNEL_1, CHANNEL_16], and optional cable number 31 : * [CABLE_1, CABLE_16]. 32 : * @param velocity 33 : * The velocity of the MIDI Note events. 34 : */ 35 2 : NoteButtonLatching(pin_t pin, const MIDIAddress &address, 36 : uint8_t velocity = 0x7F) 37 2 : : MIDIButtonLatching{ 38 2 : pin, 39 2 : address, 40 2 : {velocity}, 41 4 : } {} 42 : 43 : /// Set the velocity of the MIDI Note events. 44 : void setVelocity(uint8_t velocity) { this->sender.setVelocity(velocity); } 45 : /// Get the velocity of the MIDI Note events. 46 : uint8_t getVelocity() const { return this->sender.getVelocity(); } 47 : }; 48 : 49 : END_CS_NAMESPACE