Control Surface  1.1.0
MIDI Control Surface library for Arduino
ManyAddresses/CCButtonMatrix.hpp
Go to the documentation of this file.
1 #pragma once
2 
6 
8 
9 namespace Bankable {
10 namespace ManyAddresses {
11 
12 /**
13  * @brief A class of MIDIOutputElement%s that read the input from a **matrix
14  * of momentary push buttons or switches**, and send out MIDI **Control
15  * Change** events.
16  *
17  * A value of 0x7F is sent when a button is pressed, and a value of 0x00 is sent
18  * when a button is released.
19  * Crude software debouncing is implemented by limiting the refresh rate.
20  *
21  * * This version can be banked using an arbitrary list of alternative
22  * addresses.
23  *
24  * @tparam NumBanks
25  * The number of variants/alternative addresses the element has.
26  * @tparam nb_rows
27  * The number of rows of the matrix.
28  * @tparam nb_cols
29  * The number of columns of the matrix.
30  *
31  * @ingroup ManyAddressesMIDIOutputElements
32  */
33 template <setting_t NumBanks, uint8_t nb_rows, uint8_t nb_cols>
35  : public MIDIButtonMatrix<ManyMatrixAddresses<NumBanks, nb_rows, nb_cols>,
36  DigitalCCSender, nb_rows, nb_cols> {
37  public:
38  /**
39  * @brief Create a new Bankable CCButtonMatrix object with the given pins,
40  * controller numbers and channel.
41  *
42  * @param config
43  * The bank configuration to use: the bank to add this element to,
44  * and whether to change the address, channel or cable number.
45  * @param rowPins
46  * A list of pin numbers connected to the rows of the button
47  * matrix.
48  * **⚠** These pins will be driven LOW as outputs (Lo-Z).
49  * @param colPins
50  * A list of pin numbers connected to the columns of the button
51  * matrix.
52  * These pins will be used as inputs (Hi-Z), and the
53  * internal pull-up resistor will be enabled.
54  * @param controllers
55  * A list of 2-dimensional arrays of the same dimensions as the
56  * button matrix that contains the MIDI Controller number of each
57  * button.
58  * [0, 119]
59  * @param channelCNs
60  * The a list containing the MIDI channels [CHANNEL_1, CHANNEL_16]
61  * and Cable Numbers [0, 15].
62  * @param sender
63  * The MIDI sender to use.
64  */
66  const OutputBankConfig &config, const PinList<nb_rows> &rowPins,
67  const PinList<nb_cols> &colPins,
68  const Array<AddressMatrix<nb_rows, nb_cols>, NumBanks> &controllers,
69  const Array<MIDICNChannel, NumBanks> &channelCNs,
70  const DigitalCCSender &sender = {})
72  DigitalCCSender, nb_rows, nb_cols>{
73  {config, controllers, channelCNs}, rowPins, colPins, sender} {}
74 };
75 
76 } // namespace ManyAddresses
77 } // namespace Bankable
78 
Bankable::ManyAddresses::ManyMatrixAddresses
Definition: BankAddresses.hpp:115
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
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
Bankable::ManyAddresses::CCButtonMatrix
A class of MIDIOutputElements that read the input from a matrix of momentary push buttons or switches...
Definition: ManyAddresses/CCButtonMatrix.hpp:34
MIDIButtonMatrix.hpp
AH::Array
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
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
Bankable::ManyAddresses::CCButtonMatrix::CCButtonMatrix
CCButtonMatrix(const OutputBankConfig &config, const PinList< nb_rows > &rowPins, const PinList< nb_cols > &colPins, const Array< AddressMatrix< nb_rows, nb_cols >, NumBanks > &controllers, const Array< MIDICNChannel, NumBanks > &channelCNs, const DigitalCCSender &sender={})
Create a new Bankable CCButtonMatrix object with the given pins, controller numbers and channel.
Definition: ManyAddresses/CCButtonMatrix.hpp:65
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::MIDIButtonMatrix< ManyMatrixAddresses< NumBanks, nb_rows, nb_cols >, DigitalCCSender, nb_rows, nb_cols >::sender
DigitalCCSender sender
Definition: Bankable/Abstract/MIDIButtonMatrix.hpp:80