Control Surface  1.1.1
MIDI Control Surface library for Arduino
2.Note-Range-LEDs.ino

2.Note-Range-LEDs

This example demonstrates the use of LEDs that respond to incoming MIDI note events. The LEDs are driven by a 74HC595 (or equivalent) shift register.

Boards:
AVR, AVR USB, Due, Nano 33, Teensy 3.x, ESP32

Connections

Connect eight LEDs (and series resistors) between the outputs of the shift register and ground.

Remember to connect the enable pin of the shift register to ground and the master reset pin to Vcc in order to enable it.

Behavior

If a MIDI Note On event for note 0x3C (C4 or middle C) is sent, the first LED will light up, if a Note Off event for that note is sent, the LED will turn off.
If a MIDI Note On event for note 0x3D (C#4) is sent, the second LED will light up, and so on.
(A Note On event with a velocity of zero also counts as a Note Off event.)

Mapping

Route the MIDI output of a MIDI keyboard to the Arduino's MIDI input. Then play some notes between middle C and middle G on the keyboard. The LEDs should light up when you press the keys.

Written by PieterP, 2019-10-09
https://github.com/tttapa/Control-Surface

// Include the library
// Instantiate a MIDI Interface to use
// Instantiate a shift register as output for the LEDs
SPIShiftRegisterOut<8> sreg = {
10, // Latch pin (ST_CP)
MSBFIRST, // Byte order
};
using namespace MIDI_Notes;
// Create a range of LEDs that listens for MIDI Note messages, turning on and off
// the LEDs connected to the eight output pins of the shift register
NoteRangeLEDs<8> leds = { sreg.pins(), note(C, 4) };
// Initialize the Control Surface
void setup() {
}
// Update the Control Surface
void loop() {
}
USBMIDI_Interface
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
Definition: USBMIDI_Interface.hpp:35
Control_Surface.h
The main header file that includes all Control-Surface header files.
Control_Surface_::loop
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Definition: Control_Surface_Class.cpp:48
Control_Surface
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
Definition: Control_Surface_Class.cpp:176
MIDI_Notes::note
constexpr int8_t note(int8_t note, int8_t numOctave)
Get the MIDI note in the given octave.
Definition: Notes.hpp:35
MIDI_Notes
MIDI note names.
Definition: Notes.hpp:16
MIDI_Notes::C
constexpr int8_t C
Definition: Notes.hpp:18
NoteRangeLEDs
MIDI Input Element that listens for MIDI Note messages in a given range, and displays their values by...
Definition: NoteCCRangeLEDs.hpp:85
Control_Surface_::begin
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:25