This is an old version of the documentation. View the latest version here.
Control Surface  1.0.0
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, 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;
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:43
NoteRangeFastLED
Definition: FastLED.hpp:80
Array
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:20
Control_Surface.h
The main header file that includes all Control-Surface header files.
Array::data
T data[N]
Definition: Array.hpp:21
Control_Surface
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
Definition: Control_Surface_Class.cpp:171
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
Array::length
constexpr static size_t length
Definition: Array.hpp:23
Control_Surface_::begin
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:22
MIDI_Notes::C
constexpr int8_t C
Definition: Notes.hpp:18
MIDI_Notes
MIDI note names.
Definition: Notes.hpp:16
Control_Surface_::loop
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Definition: Control_Surface_Class.cpp:45