Control Surface new-input
MIDI Control Surface library for Arduino
NoteCCKPLED.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
7 
8 // -------------------------------------------------------------------------- //
9 
19 template <MIDIMessageType Type>
20 class NoteCCKPLED : public MatchingMIDIInputElement<Type, TwoByteMIDIMatcher> {
21  public:
24 
30  : Parent(address), ledPin(ledPin) {}
31 
32  private:
33  void handleUpdate(typename Matcher::Result match) override {
34  PinStatus_t state = match.value >= threshold ? HIGH : LOW;
36  }
37 
38  public:
40  void begin() override {
43  }
44 
46  void reset() override { AH::ExtIO::digitalWrite(ledPin, LOW); }
47 
49  uint8_t getThreshold() const { return threshold; }
51  void setThreshold(uint8_t threshold) { this->threshold = threshold; }
52 
53  private:
55  uint8_t threshold = 0x01;
56 };
57 
62 
67 
72 
73 using NoteValueLED [[deprecated("Use NoteLED instead")]] = NoteLED;
74 using CCValueLED [[deprecated("Use CCLED instead")]] = CCLED;
75 
76 // -------------------------------------------------------------------------- //
77 
78 namespace Bankable {
79 
91 template <MIDIMessageType Type, uint8_t BankSize>
92 class NoteCCKPLED : public NoteCCKPValue<Type, BankSize> {
93  public:
95  using Matcher = typename Parent::Matcher;
96 
104  : Parent(config, address), ledPin(ledPin) {}
105 
106  protected:
107  void handleUpdate(typename Matcher::Result match) override {
108  bool newdirty = Parent::handleUpdateImpl(match);
109  if (newdirty)
110  display();
111  this->dirty |= newdirty;
112  }
113 
114  void display() {
115  PinStatus_t state = getValue() >= threshold ? HIGH : LOW;
117  }
118 
119  public:
121  void begin() override {
124  }
125 
127  void reset() override {
128  Parent::reset();
130  }
131 
132  using Parent::getValue;
133 
135  uint8_t getThreshold() const { return threshold; }
137  void setThreshold(uint8_t threshold) { this->threshold = threshold; }
138 
139  protected:
140  void onBankSettingChange() override {
142  display();
143  }
144 
145  private:
147  uint8_t threshold = 0x01;
148 };
149 
154 template <uint8_t BankSize>
156 
161 template <uint8_t BankSize>
163 
168 template <uint8_t BankSize>
170 
171 template <uint8_t BankSize>
172 using NoteValueLED [[deprecated("Use NoteLED instead")]] = NoteLED<BankSize>;
173 template <uint8_t BankSize>
174 using CCValueLED [[deprecated("Use CCLED instead")]] = CCLED<BankSize>;
175 
176 } // namespace Bankable
177 
constexpr PinStatus_t LOW
constexpr PinStatus_t HIGH
AH::function_traits< decltype(::digitalWrite)>::argument_t< 1 > PinStatus_t
constexpr PinMode_t OUTPUT
#define END_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Generic base class for classes that listen for MIDI Note, Control Change and Key Pressure events on a...
Definition: NoteCCKPLED.hpp:92
void setThreshold(uint8_t threshold)
Set the LED threshold. LED will be on if getValue() >= getThreshold().
void onBankSettingChange() override
A function to be executed each time the bank setting changes.
void begin() override
Set the pinmode of the LED to OUTPUT.
uint8_t getValue() const override
Get the most recent MIDI value that was received for the active bank.
void handleUpdate(typename Matcher::Result match) override
typename Parent::Matcher Matcher
Definition: NoteCCKPLED.hpp:95
NoteCCKPLED(BankConfig< BankSize > config, pin_t ledPin, MIDIAddress address)
uint8_t getThreshold() const
Get the LED threshold.
void reset() override
Reset all values to zero and turn off the LED.
Generic base class for classes that listen for MIDI Note, Control Change and Key Pressure events on a...
void onBankSettingChange() override
A function to be executed each time the bank setting changes.
bool handleUpdateImpl(typename Matcher::Result match)
BankableTwoByteMIDIMatcher< BankSize > Matcher
uint8_t getValue() const override
Get the most recent MIDI value that was received for the active bank.
void reset() override
Reset all values to zero.
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
The MIDIInputElement base class is very general: you give it a MIDI message, and it calls the updateW...
Generic base class for classes that listen for MIDI Note, Control Change and Key Pressure events on a...
Definition: NoteCCKPLED.hpp:20
NoteCCKPLED(pin_t ledPin, MIDIAddress address)
Definition: NoteCCKPLED.hpp:29
void setThreshold(uint8_t threshold)
Set the LED threshold. LED will be on if getValue() >= getThreshold().
Definition: NoteCCKPLED.hpp:51
void begin() override
Set the pinmode of the LED to OUTPUT.
Definition: NoteCCKPLED.hpp:40
uint8_t threshold
Definition: NoteCCKPLED.hpp:55
void handleUpdate(typename Matcher::Result match) override
Definition: NoteCCKPLED.hpp:33
uint8_t getThreshold() const
Get the LED threshold.
Definition: NoteCCKPLED.hpp:49
void reset() override
Turn off the LED.
Definition: NoteCCKPLED.hpp:46
void pinMode(pin_t pin, PinMode_t mode)
An ExtIO version of the Arduino function.
void digitalWrite(pin_t pin, PinStatus_t val)
An ExtIO version of the Arduino function.
NoteCCKPLED< MIDIMessageType::CONTROL_CHANGE > CCLED
Class that listens for MIDI Control Change events on a single address and turns on an LED when the va...
Definition: NoteCCKPLED.hpp:66
NoteCCKPLED< MIDIMessageType::NOTE_ON > NoteLED
Class that listens for MIDI Note events on a single address and turns on an LED when the value is hig...
Definition: NoteCCKPLED.hpp:61
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Matcher for MIDI messages with 2 data bytes, such as Note On/Off, Control Change, Key Pressure (but n...