Line data Source code
1 : #pragma once
2 :
3 : #include <Banks/BankAddresses.hpp>
4 : #include <MIDI_Outputs/Bankable/Abstract/MIDIButtonMatrix.hpp>
5 : #include <MIDI_Senders/DigitalCCSender.hpp>
6 :
7 : BEGIN_CS_NAMESPACE
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 NumRows
27 : * The number of rows of the matrix.
28 : * @tparam NumCols
29 : * The number of columns of the matrix.
30 : *
31 : * @ingroup ManyAddressesMIDIOutputElements
32 : */
33 : template <setting_t NumBanks, uint8_t NumRows, uint8_t NumCols>
34 : class CCButtonMatrix
35 : : public MIDIButtonMatrix<ManyMatrixAddresses<NumBanks, NumRows, NumCols>,
36 : DigitalCCSender, NumRows, NumCols> {
37 : public:
38 : /**
39 : * @brief Create a new Bankable CCButtonMatrix object with the given pins,
40 : * controller numbers and channel.
41 : *
42 : * @param bank
43 : * The bank to add this element to.
44 : * @param rowPins
45 : * A list of pin numbers connected to the rows of the button
46 : * matrix.
47 : * **⚠** These pins will be driven LOW as outputs (Lo-Z).
48 : * @param colPins
49 : * A list of pin numbers connected to the columns of the button
50 : * matrix.
51 : * These pins will be used as inputs (Hi-Z), and the
52 : * internal pull-up resistor will be enabled.
53 : * @param controllers
54 : * A list of 2-dimensional arrays of the same dimensions as the
55 : * button matrix that contains the MIDI Controller number of each
56 : * button.
57 : * [0, 119]
58 : * @param channelCNs
59 : * The a list containing the MIDI channels [Channel_1, Channel_16]
60 : * and Cable Numbers [Cable_1, Cable_16].
61 : * @param sender
62 : * The MIDI sender to use.
63 : */
64 1 : CCButtonMatrix(
65 : const Bank<NumBanks> &bank, const PinList<NumRows> &rowPins,
66 : const PinList<NumCols> &colPins,
67 : const Array<AddressMatrix<NumRows, NumCols>, NumBanks> &controllers,
68 : const Array<MIDIChannelCable, NumBanks> &channelCNs,
69 : const DigitalCCSender &sender = {})
70 : : MIDIButtonMatrix<ManyMatrixAddresses<NumBanks, NumRows, NumCols>,
71 : DigitalCCSender, NumRows, NumCols> {
72 1 : {bank, controllers, channelCNs}, rowPins, colPins, sender} {}
73 : };
74 :
75 : } // namespace ManyAddresses
76 : } // namespace Bankable
77 :
78 : END_CS_NAMESPACE
|