Control Surface  1.1.0
MIDI Control Surface library for Arduino
NoteCCRangeLEDs.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
8 
10 
11 template <uint8_t NumLEDs>
13  public:
14  NoteCCLED(const PinList<NumLEDs> &ledPins) : ledPins(ledPins) {}
15 
16  void setThreshold(uint8_t threshold) { this->threshold = threshold; }
17  uint8_t getThreshold() const { return this->threshold; }
18 
19  void begin(const INoteCCValue &t) override {
20  for (pin_t pin : ledPins)
22  updateAll(t);
23  }
24 
25  void update(const INoteCCValue &t, uint8_t index) override {
26  uint8_t value = t.getValue(index);
27  bool state = value > threshold;
28  AH::ExtIO::digitalWrite(ledPins[index], state);
29  }
30 
31  private:
32  PinList<NumLEDs> ledPins;
33  uint8_t threshold = 0x3F;
34 };
35 
36 template <uint8_t RangeLen>
37 class NoteRangeLEDs : public GenericNoteCCRange<MIDIInputElementNote, RangeLen,
38  NoteCCLED<RangeLen>> {
39  public:
40  NoteRangeLEDs(const PinList<RangeLen> &ledPins,
43  NoteCCLED<RangeLen>>{
44  address,
45  {ledPins},
46  } {}
47 };
48 
50  : public GenericNoteCCRange<MIDIInputElementNote, 1, NoteCCLED<1>> {
51  public:
54  address,
55  {{ledPin}},
56  } {}
57 };
58 
59 using MIDINoteLED[[deprecated("Use NoteValueLED instead")]] = NoteValueLED;
60 
61 template <uint8_t RangeLen>
62 class CCRangeLEDs : public GenericNoteCCRange<MIDIInputElementCC, RangeLen,
63  NoteCCLED<RangeLen>> {
64  public:
65  CCRangeLEDs(const PinList<RangeLen> &ledPins, MIDICNChannelAddress address)
66  : GenericNoteCCRange<MIDIInputElementCC, RangeLen, NoteCCLED<RangeLen>>{
67  address,
68  {ledPins},
69  } {}
70 };
71 
73  : public GenericNoteCCRange<MIDIInputElementCC, 1, NoteCCLED<1>> {
74  public:
77  address,
78  {{ledPin}},
79  } {}
80 };
81 
82 namespace Bankable {
83 
84 template <uint8_t RangeLen, uint8_t BankSize>
85 class NoteRangeLEDs : public GenericNoteCCRange<MIDIInputElementNote, RangeLen,
86  BankSize, NoteCCLED<RangeLen>> {
87  public:
89  const PinList<RangeLen> &ledPins,
91  : GenericNoteCCRange<MIDIInputElementNote, RangeLen, BankSize,
92  NoteCCLED<RangeLen>>{
93  config,
94  address,
95  {ledPins},
96  } {}
97 };
98 
99 template <uint8_t BankSize>
100 class NoteValueLED : public GenericNoteCCRange<MIDIInputElementNote, 1,
101  BankSize, NoteCCLED<1>> {
102  public:
103  NoteValueLED(const BankConfig<BankSize> &config, pin_t ledPin,
106  config,
107  address,
108  {{ledPin}},
109  } {}
110 };
111 
112 template <uint8_t BankSize>
113 using MIDINoteLED[[deprecated("Use NoteValueLED instead")]] =
115 
116 template <uint8_t RangeLen, uint8_t BankSize>
117 class CCRangeLEDs : public GenericNoteCCRange<MIDIInputElementCC, RangeLen,
118  BankSize, NoteCCLED<RangeLen>> {
119  public:
121  const PinList<RangeLen> &ledPins,
123  : GenericNoteCCRange<MIDIInputElementCC, RangeLen, BankSize,
124  NoteCCLED<RangeLen>>{
125  config,
126  address,
127  {ledPins},
128  } {}
129 };
130 
131 template <uint8_t BankSize>
133  : public GenericNoteCCRange<MIDIInputElementCC, 1, BankSize, NoteCCLED<1>> {
134  public:
135  CCValueLED(const BankConfig<BankSize> &config, pin_t ledPin,
137  : GenericNoteCCRange<MIDIInputElementCC, 1, BankSize, NoteCCLED<1>>{
138  config,
139  address,
140  {{ledPin}},
141  } {}
142 };
143 
144 } // namespace Bankable
145 
147 
CCRangeLEDs::CCRangeLEDs
CCRangeLEDs(const PinList< RangeLen > &ledPins, MIDICNChannelAddress address)
Definition: NoteCCRangeLEDs.hpp:65
Bankable::CCValueLED
Definition: NoteCCRangeLEDs.hpp:132
MIDIInputElementNote
Class for objects that listen for incoming MIDI Note events.
Definition: MIDIInputElementNote.hpp:20
Warnings.hpp
Bankable::NoteValueLED
Definition: NoteCCRangeLEDs.hpp:100
Bankable::NoteValueLED::NoteValueLED
NoteValueLED(const BankConfig< BankSize > &config, pin_t ledPin, const MIDICNChannelAddress &address)
Definition: NoteCCRangeLEDs.hpp:103
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition: BankAddresses.hpp:7
GenericNoteCCRange
Definition: NoteCCRange.hpp:105
INoteCCValue
Definition: NoteCCRange.hpp:9
Bankable::CCValueLED::CCValueLED
CCValueLED(const BankConfig< BankSize > &config, pin_t ledPin, const MIDICNChannelAddress &address)
Definition: NoteCCRangeLEDs.hpp:135
NoteValueLED::NoteValueLED
NoteValueLED(pin_t ledPin, MIDICNChannelAddress address)
Definition: NoteCCRangeLEDs.hpp:52
SimpleNoteCCValueCallback
Definition: NoteCCRange.hpp:29
AH::ExtIO::pinMode
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:36
Bankable::GenericNoteCCRange
Definition: NoteCCRange.hpp:164
NoteRangeLEDs::NoteRangeLEDs
NoteRangeLEDs(const PinList< RangeLen > &ledPins, MIDICNChannelAddress address)
Definition: NoteCCRangeLEDs.hpp:40
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
MIDIInputElementCC
Class for objects that listen for incoming MIDI Controller Change events.
Definition: MIDIInputElementCC.hpp:23
AH_DIAGNOSTIC_POP
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
Bankable::CCRangeLEDs
Definition: NoteCCRangeLEDs.hpp:117
NoteCCLED::ledPins
PinList< NumLEDs > ledPins
Definition: NoteCCRangeLEDs.hpp:32
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
MIDICNChannelAddress
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
Definition: MIDICNChannelAddress.hpp:82
NoteCCLED::NoteCCLED
NoteCCLED(const PinList< NumLEDs > &ledPins)
Definition: NoteCCRangeLEDs.hpp:14
NoteValueLED
Definition: NoteCCRangeLEDs.hpp:49
AH::pin_t
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
Definition: Hardware-Types.hpp:17
Bankable::CCRangeLEDs::CCRangeLEDs
CCRangeLEDs(const BankConfig< BankSize > &config, const PinList< RangeLen > &ledPins, const MIDICNChannelAddress &address)
Definition: NoteCCRangeLEDs.hpp:120
CCValueLED::CCValueLED
CCValueLED(pin_t ledPin, MIDICNChannelAddress address)
Definition: NoteCCRangeLEDs.hpp:75
NoteCCLED
Definition: NoteCCRangeLEDs.hpp:12
NoteCCLED::update
void update(const INoteCCValue &t, uint8_t index) override
Definition: NoteCCRangeLEDs.hpp:25
NoteCCLED::setThreshold
void setThreshold(uint8_t threshold)
Definition: NoteCCRangeLEDs.hpp:16
CCRangeLEDs
Definition: NoteCCRangeLEDs.hpp:62
NoteCCLED::threshold
uint8_t threshold
Definition: NoteCCRangeLEDs.hpp:33
AH_DIAGNOSTIC_WERROR
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
CCValueLED
Definition: NoteCCRangeLEDs.hpp:72
BankConfig
A struct for selecting the bank of BankableMIDIInputs and the bank type.
Definition: BankConfig.hpp:39
OUTPUT
const uint8_t OUTPUT
Definition: ExtendedInputOutput.hpp:50
NoteCCLED::begin
void begin(const INoteCCValue &t) override
Definition: NoteCCRangeLEDs.hpp:19
MIDIInputElement::address
const MIDICNChannelAddress address
Definition: MIDIInputElement.hpp:80
INoteCCValue::getValue
virtual uint8_t getValue(uint8_t index) const =0
NoteCCLED::getThreshold
uint8_t getThreshold() const
Definition: NoteCCRangeLEDs.hpp:17
Bankable::NoteRangeLEDs
Definition: NoteCCRangeLEDs.hpp:85
NoteRangeLEDs
Definition: NoteCCRangeLEDs.hpp:37
Bankable::NoteRangeLEDs::NoteRangeLEDs
NoteRangeLEDs(const BankConfig< BankSize > &config, const PinList< RangeLen > &ledPins, const MIDICNChannelAddress &address)
Definition: NoteCCRangeLEDs.hpp:88
NoteCCRange.hpp
SimpleNoteCCValueCallback::updateAll
virtual void updateAll(const INoteCCValue &noteccval)
Definition: NoteCCRange.hpp:36
AH::ExtIO::digitalWrite
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:47