Control Surface main
MIDI Control Surface library for Arduino


This example demonstrates the use of LEDs that respond to incoming MIDI note events. The LEDs are driven by a MAX7219.

AVR, AVR USB, Nano Every, Due, Nano 33 IoT, Nano 33 BLE, Pi Pico, Teensy 3.x, ESP32, ESP8266



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


Route the MIDI output of a MIDI keyboard to the Arduino's MIDI input. Then play a middle C on the keyboard.

Written by PieterP, 2020-03-24

#include <Control_Surface.h> // Include the Control Surface library
// Instantiate a MIDI over USB interface.
// Instantiate a MAX7219 with the SPI slave select pin as latch pin
// There's just 1 MAX7219 in the chain, if you have more of them daisy-chained
// together, you can increase the template argument (between angled brackets)
MAX7219<1> max7219 {SPI, SS};
// Instantiate the LED that will light up when middle C is playing
NoteLED led {, // First pin of the MAX7219
{MIDI_Notes::C(4), CHANNEL_1}, // Note C4 on MIDI channel 1
void setup() {
Control_Surface.begin(); // Initialize Control Surface
// No need to initialize the MAX7219 or to set pinModes, all of this
// is handled by Control Surface.
void loop() {
Control_Surface.loop(); // Update the Control Surface
constexpr Channel CHANNEL_1
Definition: Channel.hpp:118
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.
void begin()
Initialize the Control_Surface.
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Generic base class for classes that listen for MIDI Note, Control Change and Key Pressure events on a...
Definition: NoteCCKPLED.hpp:20
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
constexpr Note C
C (Do)
Definition: Notes.hpp:40