Control Surface  1.1.0
MIDI Control Surface library for Arduino
NoteButtons.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
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 **Note**
11  * events.
12  *
13  * A Note On event is sent when a button is pressed, and a Note Off event is
14  * sent when a button is released.
15  * The buttons are debounced in software.
16  * This version cannot be banked.
17  *
18  * @tparam NUMBER_OF_BUTTONS
19  * The number of buttons in the collection.
20  *
21  * @ingroup MIDIOutputElements
22  */
23 template <uint8_t NUMBER_OF_BUTTONS>
24 class NoteButtons : public MIDIButtons<DigitalNoteSender, NUMBER_OF_BUTTONS> {
25  public:
26  /**
27  * @brief Create a new NoteButtons object with the given pins,
28  * the given controller number and channel.
29  *
30  * @param buttons
31  * An list of digital input pins with the buttons connected.
32  * The internal pull-up resistors will be enabled.
33  * @param baseAddress
34  * The MIDI address of the first button, containing the note
35  * number [0, 127], channel [CHANNEL_1, CHANNEL_16], and optional
36  * cable number [0, 15].
37  * @param incrementAddress
38  * The number of addresses to increment for each next button.
39  * E.g. if `baseAddress` is 8, and `incrementAddress` is 2,
40  * then the first button will send on address 8, the second
41  * button will send on address 10, button three on address 12, etc.
42  * @param velocity
43  * The velocity of the MIDI Note events.
44  */
48  uint8_t velocity = 0x7F)
49  : MIDIButtons<DigitalNoteSender, NUMBER_OF_BUTTONS>{
50  buttons,
53  {velocity},
54  } {}
55 
56  /// Set the velocity of the MIDI Note events.
57  void setVelocity(uint8_t velocity) { this->sender.setVelocity(velocity); }
58  /// Get the velocity of the MIDI Note events.
59  uint8_t getVelocity() const { return this->sender.getVelocity(); }
60 };
61 
NoteButtons
A class of MIDIOutputElements that read the input of a collection of momentary push buttons or switch...
Definition: NoteButtons.hpp:24
MIDIButtons< DigitalNoteSender, NUMBER_OF_BUTTONS >::sender
DigitalNoteSender sender
Definition: Abstract/MIDIButtons.hpp:66
NoteButtons::getVelocity
uint8_t getVelocity() const
Get the velocity of the MIDI Note events.
Definition: NoteButtons.hpp:59
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
MIDIButtons< DigitalNoteSender, NUMBER_OF_BUTTONS >::baseAddress
const MIDICNChannelAddress baseAddress
Definition: Abstract/MIDIButtons.hpp:62
MIDIButtons
An abstract class for momentary push buttons that send MIDI events.
Definition: Abstract/MIDIButtons.hpp:17
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
MIDIButtons< DigitalNoteSender, NUMBER_OF_BUTTONS >::buttons
Array< AH::Button, NUMBER_OF_BUTTONS > buttons
Definition: Abstract/MIDIButtons.hpp:61
DigitalNoteSender::getVelocity
uint8_t getVelocity() const
Definition: DigitalNoteSender.hpp:18
NoteButtons::setVelocity
void setVelocity(uint8_t velocity)
Set the velocity of the MIDI Note events.
Definition: NoteButtons.hpp:57
NoteButtons::NoteButtons
NoteButtons(const Array< AH::Button, NUMBER_OF_BUTTONS > &buttons, const MIDICNChannelAddress &baseAddress, const RelativeMIDICNChannelAddress &incrementAddress, uint8_t velocity=0x7F)
Create a new NoteButtons object with the given pins, the given controller number and channel.
Definition: NoteButtons.hpp:45
DigitalNoteSender.hpp
DigitalNoteSender
Definition: DigitalNoteSender.hpp:7
MIDIButtons< DigitalNoteSender, NUMBER_OF_BUTTONS >::incrementAddress
const RelativeMIDICNChannelAddress incrementAddress
Definition: Abstract/MIDIButtons.hpp:63
DigitalNoteSender::setVelocity
void setVelocity(uint8_t velocity)
Definition: DigitalNoteSender.hpp:17
MIDIButtons.hpp