Control Surface  1.1.0
MIDI Control Surface library for Arduino
Bankable/NoteButtons.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
7 
8 namespace Bankable {
9 
10 /**
11  * @brief A class of MIDIOutputElement%s that read the input of a **collection
12  * of momentary push buttons or switches**, and send out MIDI **Note**
13  * events.
14  *
15  * A Note On event is sent when a button is pressed, and a Note Off
16  * event is sent when a button is released.
17  * The buttons are debounced in software.
18  * This version can be banked.
19  *
20  * @tparam NUMBER_OF_BUTTONS
21  * The number of buttons in the collection.
22  *
23  * @ingroup BankableMIDIOutputElements
24  */
25 template <uint8_t NUMBER_OF_BUTTONS>
26 class NoteButtons : public MIDIButtons<DigitalNoteSender, NUMBER_OF_BUTTONS> {
27  public:
28  /**
29  * @brief Create a new Bankable NoteButtons object with the given pins,
30  * the given controller number and channel.
31  *
32  * @param config
33  * The bank configuration to use: the bank to add this element to,
34  * and whether to change the address, channel or cable number.
35  * @param buttons
36  * An list of digital input pins with the buttons connected.
37  * The internal pull-up resistors will be enabled.
38  * @param baseAddress
39  * The MIDI address of the first button, containing the note
40  * number [0, 127], channel [CHANNEL_1, CHANNEL_16], and optional
41  * cable number [0, 15].
42  * @param incrementAddress
43  * The number of addresses to increment for each next button.
44  * E.g. if `baseAddress` is 8, and `incrementAddress` is 2,
45  * then the first button will send on address 8, the second
46  * button will send on address 10, button three on address 12, etc.
47  * @param velocity
48  * The velocity of the MIDI Note events.
49  */
54  uint8_t velocity = 0x7F)
55  : MIDIButtons<DigitalNoteSender, NUMBER_OF_BUTTONS>{
56  config, buttons, baseAddress, incrementAddress, {velocity},
57  } {}
58 
59  /// Set the velocity of the MIDI Note events.
60  void setVelocity(uint8_t velocity) { this->sender.setVelocity(velocity); }
61  /// Get the velocity of the MIDI Note events.
62  uint8_t getVelocity() const { return this->sender.getVelocity(); }
63 };
64 
65 } // namespace Bankable
66 
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition: BankAddresses.hpp:7
Bankable::MIDIButtons::baseAddress
const MIDICNChannelAddress baseAddress
Definition: Bankable/Abstract/MIDIButtons.hpp:78
Bankable::MIDIButtons::buttons
Array< AH::Button, NUMBER_OF_BUTTONS > buttons
Definition: Bankable/Abstract/MIDIButtons.hpp:77
Bankable::MIDIButtons::incrementAddress
const RelativeMIDICNChannelAddress incrementAddress
Definition: Bankable/Abstract/MIDIButtons.hpp:79
Bankable::NoteButtons::setVelocity
void setVelocity(uint8_t velocity)
Set the velocity of the MIDI Note events.
Definition: Bankable/NoteButtons.hpp:60
Bankable::NoteButtons::getVelocity
uint8_t getVelocity() const
Get the velocity of the MIDI Note events.
Definition: Bankable/NoteButtons.hpp:62
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
RelativeMIDICNChannelAddress
A class for saving an offset to a MIDI address.
Definition: MIDICNChannelAddress.hpp:58
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
Bankable::NoteButtons
A class of MIDIOutputElements that read the input of a collection of momentary push buttons or switch...
Definition: Bankable/NoteButtons.hpp:26
MIDIButtons.hpp
Bankable::MIDIButtons::sender
Sender sender
Definition: Bankable/Abstract/MIDIButtons.hpp:83
MIDICNChannelAddress
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
Definition: MIDICNChannelAddress.hpp:82
AH::Array
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
DigitalNoteSender.hpp
DigitalNoteSender
Definition: DigitalNoteSender.hpp:7
Bankable::NoteButtons::NoteButtons
NoteButtons(const OutputBankConfig &config, const Array< AH::Button, NUMBER_OF_BUTTONS > &buttons, const MIDICNChannelAddress &baseAddress, const RelativeMIDICNChannelAddress &incrementAddress, uint8_t velocity=0x7F)
Create a new Bankable NoteButtons object with the given pins, the given controller number and channel...
Definition: Bankable/NoteButtons.hpp:50
OutputBankConfig
A struct for selecting the bank of BankableMIDIOutputs and the bank type.
Definition: BankConfig.hpp:50
Bankable::MIDIButtons
An abstract class for momentary push buttons that send MIDI events.
Definition: Bankable/Abstract/MIDIButtons.hpp:23