Line data Source code
1 : #pragma once
2 :
3 : #include <MIDI_Outputs/Abstract/MIDIButtonMatrix.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 from a **matrix
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 : * Crude software debouncing is implemented by limiting the refresh rate.
16 : * This version cannot be banked.
17 : *
18 : * @ingroup MIDIOutputElements
19 : *
20 : * @tparam NumRows
21 : * The number of rows of the matrix.
22 : * @tparam NumCols
23 : * The number of columns of the matrix.
24 : */
25 : template <uint8_t NumRows, uint8_t NumCols>
26 : class NoteButtonMatrix
27 : : public MIDIButtonMatrix<DigitalNoteSender, NumRows, NumCols> {
28 : public:
29 : /**
30 : * @brief Create a new NoteButtonMatrix object with the given pins,
31 : * note numbers and channel.
32 : *
33 : * @param rowPins
34 : * A list of pin numbers connected to the rows of the button
35 : * matrix.
36 : * **⚠** These pins will be driven LOW as outputs (Lo-Z).
37 : * @param colPins
38 : * A list of pin numbers connected to the columns of the button
39 : * matrix.
40 : * These pins will be used as inputs (Hi-Z), and the
41 : * internal pull-up resistor will be enabled.
42 : * @param notes
43 : * A 2-dimensional array of the same dimensions as the button
44 : * matrix that contains the note number of each button. [0, 127]
45 : * @param channelCN
46 : * The MIDI channel [1, 16] and Cable Number [Cable_1, Cable_16].
47 : * @param velocity
48 : * The velocity of the MIDI Note events.
49 : */
50 2 : NoteButtonMatrix(const PinList<NumRows> &rowPins,
51 : const PinList<NumCols> &colPins,
52 : const AddressMatrix<NumRows, NumCols> ¬es,
53 : MIDIChannelCable channelCN = {Channel_1, Cable_1},
54 : uint8_t velocity = 0x7F)
55 : : MIDIButtonMatrix<DigitalNoteSender, NumRows, NumCols> {
56 : rowPins, colPins, notes, channelCN, {velocity},
57 2 : } {}
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 : END_CS_NAMESPACE
|