Control Surface  1.1.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, 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

/**
* 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
* -----------
*
* - 2: Data pin of NeoPixel LED strip with at least 8 pixels.
*
* 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
Control_Surface.h
The main header file that includes all Control-Surface header files.
Control_Surface
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
Definition: Control_Surface_Class.cpp:174
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
Control_Surface_::begin
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:25
MIDI_Notes::C
constexpr int8_t C
Definition: Notes.hpp:18
MIDI_Notes
MIDI note names.
Definition: Notes.hpp:16
NoteCCRange::length
constexpr static uint8_t length()
Definition: NoteCCRange.hpp:98
Control_Surface_::loop
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Definition: Control_Surface_Class.cpp:48