Control Surface  1.1.1
MIDI Control Surface library for Arduino
9.Note-FastLED.ino

9.Note-FastLED

This example demonstrates the use of addressable LEDs that respond to incoming MIDI note events.

Boards:
AVR, AVR USB, Due, Nano 33, Teensy 3.x, ESP32
Note
You might lose incoming MIDI data while the LED strip is being updated. To avoid this, don't use an Arduino UNO.
See https://github.com/FastLED/FastLED/wiki/Interrupt-problems

Connections

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, etc.
(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 a middle C and some notes above it on the keyboard.

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

#include <FastLED.h>
// Must be before Control Surface to enable FastLED features of Control Surface
// Define the array of leds.
Array<CRGB, 8> leds = {};
// The data pin with the strip connected.
constexpr uint8_t ledpin = 2;
using namespace MIDI_Notes;
// Create a MIDI input element that listens to all notes in the range C4 - G4
// (the range starts at C4 and has a length equal to `leds.length` == 8).
NoteRangeFastLED<leds.length> midiled = {leds, note(C, 4)};
void setup() {
// See FastLED examples and documentation for more information.
FastLED.addLeds<NEOPIXEL, ledpin>(leds.data, leds.length);
FastLED.setCorrection(TypicalPixelString);
midiled.setBrightness(128);
}
void loop() {
FastLED.show();
}
USBMIDI_Interface
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
Definition: USBMIDI_Interface.hpp:35
NoteCCRange::length
constexpr static uint8_t length()
Get the length of the range.
Definition: NoteCCRange.hpp:148
NoteRangeFastLED
MIDI Input Element that listens for MIDI Note messages in a given range, and displays their values us...
Definition: FastLED.hpp:136
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
Control_Surface_::begin
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:25