Control Surface main
MIDI Control Surface library for Arduino
Loading...
Searching...
No Matches
10.Note-FastLED-ColorMapper.ino

10.Note-FastLED-ColorMapper

This example demonstrates the use of addressable LEDs that respond to incoming MIDI note events. This example uses a custom color mapper to get a rainbow effect across the LED strip.

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.
// The data pin with the strip connected.
constexpr uint8_t ledpin = 2;
// Create a functor that maps the velocity and the index of a note to a color.
struct RainbowColorMapper {
CHSV operator()(uint8_t velocity, uint8_t index) const {
return CHSV(255 * index / leds.length, 255, 255u * velocity / 127u);
}
};
NoteRangeFastLED<leds.length, RainbowColorMapper> midiled {
leds,
};
void setup() {
// See FastLED examples and documentation for more information.
FastLED.addLeds<NEOPIXEL, ledpin>(leds.data, leds.length);
FastLED.setCorrection(TypicalPixelString);
midiled.setBrightness(128);
Control_Surface.begin();
}
void loop() {
if (midiled.getDirty()) { // If the colors changed
FastLED.show(); // Update the LEDs with the new colors
midiled.clearDirty(); // Clear the dirty flag
}
}
The main header file that includes all Control-Surface header files.
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
NoteCCKPRangeFastLED< MIDIMessageType::NoteOn, RangeLen, ColorMapper > NoteRangeFastLED
MIDI Input Element that listens for MIDI Note messages in a given range, and displays their values us...
constexpr Note C
C (Do).
Definition Notes.hpp:56
An array wrapper for easy copying, comparing, and iterating.
Definition Array.hpp:32
static constexpr size_t length
Definition Array.hpp:35
T data[N]
Definition Array.hpp:33