Control Surface  1.1.0
MIDI Control Surface library for Arduino
Bankable/CCButtonMatrix.hpp
Go to the documentation of this file.
1 #pragma once
2 
6 
8 
9 namespace Bankable {
10 
11 /**
12  * @brief A class of MIDIOutputElement%s that read the input from a **matrix
13  * of momentary push buttons or switches**, and send out MIDI **Control
14  * Change** events.
15  *
16  * A value of 0x7F is sent when a button is pressed, and a value of 0x00 is sent
17  * when a button is released.
18  * Crude software debouncing is implemented by limiting the refresh rate.
19  * This version can be banked.
20  *
21  * @tparam nb_rows
22  * The number of rows of the matrix.
23  * @tparam nb_cols
24  * The number of columns of the matrix.
25  *
26  * @ingroup BankableMIDIOutputElements
27  */
28 template <uint8_t nb_rows, uint8_t nb_cols>
30  : public MIDIButtonMatrix<MatrixAddress<nb_rows, nb_cols>, DigitalCCSender,
31  nb_rows, nb_cols> {
32  public:
33  /**
34  * @brief Create a new Bankable CCButtonMatrix object with the given pins,
35  * controller numbers and channel.
36  *
37  * @param config
38  * The bank configuration to use: the bank to add this element to,
39  * and whether to change the address, channel or cable number.
40  * @param rowPins
41  * A list of pin numbers connected to the rows of the button
42  * matrix.
43  * **⚠** These pins will be driven LOW as outputs (Lo-Z).
44  * @param colPins
45  * A list of pin numbers connected to the columns of the button
46  * matrix.
47  * These pins will be used as inputs (Hi-Z), and the
48  * internal pull-up resistor will be enabled.
49  * @param controllers
50  * A 2-dimensional array of the same dimensions as the button
51  * matrix that contains the MIDI Controller number of each button.
52  * [0, 119]
53  * @param channelCN
54  * The MIDI channel [CHANNEL_1, CHANNEL_16] and Cable Number
55  * [0, 15].
56  * @param sender
57  * The MIDI sender to use.
58  */
60  const PinList<nb_rows> &rowPins,
61  const PinList<nb_cols> &colPins,
62  const AddressMatrix<nb_rows, nb_cols> &controllers,
63  MIDICNChannel channelCN, const DigitalCCSender &sender = {})
65  nb_rows, nb_cols>{
66  {config, controllers, channelCN}, rowPins, colPins, sender} {}
67 };
68 
69 } // namespace Bankable
70 
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition: BankAddresses.hpp:7
DigitalCCSender.hpp
Bankable::CCButtonMatrix::CCButtonMatrix
CCButtonMatrix(const OutputBankConfig &config, const PinList< nb_rows > &rowPins, const PinList< nb_cols > &colPins, const AddressMatrix< nb_rows, nb_cols > &controllers, MIDICNChannel channelCN, const DigitalCCSender &sender={})
Create a new Bankable CCButtonMatrix object with the given pins, controller numbers and channel.
Definition: Bankable/CCButtonMatrix.hpp:59
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
BankAddresses.hpp
DigitalCCSender
Definition: DigitalCCSender.hpp:7
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
MIDIButtonMatrix.hpp
Bankable::CCButtonMatrix
A class of MIDIOutputElements that read the input from a matrix of momentary push buttons or switches...
Definition: Bankable/CCButtonMatrix.hpp:29
MIDICNChannel
A class for saving a MIDI channel and cable number.
Definition: MIDICNChannelAddress.hpp:19
AddressMatrix
Array2D< uint8_t, nb_rows, nb_cols > AddressMatrix
Definition: Def.hpp:26
AH::ButtonMatrix::rowPins
const PinList< nb_rows > rowPins
Definition: ButtonMatrix.hpp:85
AH::ButtonMatrix::colPins
const PinList< nb_cols > colPins
Definition: ButtonMatrix.hpp:86
OutputBankConfig
A struct for selecting the bank of BankableMIDIOutputs and the bank type.
Definition: BankConfig.hpp:50
Bankable::MIDIButtonMatrix
MIDIButtonMatrix.
Definition: Bankable/Abstract/MIDIButtonMatrix.hpp:29
Bankable::MatrixAddress
Definition: BankAddresses.hpp:43
Bankable::MIDIButtonMatrix< MatrixAddress< nb_rows, nb_cols >, DigitalCCSender, nb_rows, nb_cols >::sender
DigitalCCSender sender
Definition: Bankable/Abstract/MIDIButtonMatrix.hpp:80