Line data Source code
1 : #include <MIDI_Outputs/Bankable/Abstract/MIDIButtons.hpp> 2 : #include <MIDI_Senders/DigitalCCSender.hpp> 3 : 4 : BEGIN_CS_NAMESPACE 5 : 6 : namespace Bankable { 7 : 8 : /** 9 : * @brief A class of MIDIOutputElement%s that read the input of **a collection 10 : * of momentary push buttons or switches**, and send out MIDI **Control 11 : * Change** events. 12 : * 13 : * A value of 0x7F is sent when a button is pressed, and a value of 0x00 is sent 14 : * when a button is released. 15 : * The buttons are debounced in software. 16 : * This version can be banked. 17 : * 18 : * @tparam NUMBER_OF_BUTTONS 19 : * The number of buttons in the collection. 20 : * 21 : * @ingroup BankableMIDIOutputElements 22 : */ 23 : template <uint8_t NUMBER_OF_BUTTONS> 24 3 : class CCButtons : public MIDIButtons<DigitalCCSender, NUMBER_OF_BUTTONS> { 25 : public: 26 : /** 27 : * @brief Create a new Bankable CCButtons object with the given pins, 28 : * the given controller number and channel. 29 : * 30 : * @param config 31 : * The bank configuration to use: the bank to add this element to, 32 : * and whether to change the address, channel or cable number. 33 : * @param buttons 34 : * An list of digital input pins with the buttons connected. 35 : * The internal pull-up resistors will be enabled. 36 : * @param baseAddress 37 : * The MIDI address of the first button, containing the controller 38 : * number [0, 119], channel [CHANNEL_1, CHANNEL_16], and optional 39 : * cable number [0, 15]. 40 : * @param incrementAddress 41 : * The number of addresses to increment for each next button. 42 : * E.g. if `baseAddress` is 8, and `incrementAddress` is 2, 43 : * then the first button will send on address 8, the second 44 : * button will send on address 10, button three on address 12, etc. 45 : * @param sender 46 : * The MIDI sender to use. 47 : */ 48 3 : CCButtons(const OutputBankConfig &config, 49 : const Array<AH::Button, NUMBER_OF_BUTTONS> &buttons, 50 : const MIDICNChannelAddress &baseAddress, 51 : const RelativeMIDICNChannelAddress &incrementAddress, 52 : const DigitalCCSender &sender = {}) 53 3 : : MIDIButtons<DigitalCCSender, NUMBER_OF_BUTTONS>( 54 6 : config, buttons, baseAddress, incrementAddress, sender) {} 55 : }; 56 : 57 : } // namespace Bankable 58 : 59 : END_CS_NAMESPACE