Control Surface main
MIDI Control Surface library for Arduino


This example demonstrates how to use the MIDI interface for debugging.

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


The internal pull-up resistor for the button will be enabled automatically.




Written by PieterP, 2019-08-07

#include <Control_Surface.h> // Include the Control Surface library
// Instantiate a MIDI Debug interface at 115200 baud.
USBDebugMIDI_Interface midi = 115200;
// Instantiate a NoteButton object
NoteButton button {
5, // Push button on pin 5
{MIDI_Notes::C(4), CHANNEL_1}, // Note C4 on MIDI channel 1
// Instantiate the LED that will light up when middle C is playing
NoteLED led {
LED_BUILTIN, // Pin of built-in LED
{MIDI_Notes::C(4), CHANNEL_1}, // Note C4 on MIDI channel 1
void setup() {
Control_Surface.begin(); // Initialize 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.
A class of MIDIOutputElements that read the input of a momentary push button or switch,...
Definition: NoteButton.hpp:19
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 debug MIDI interfaces sending and receiving human-readable MIDI messages over the USB CDC...
constexpr Note C
C (Do)
Definition: Notes.hpp:40