Control Surface main
MIDI Control Surface library for Arduino


This example demonstrates how to use a Serial MIDI Interface, for use with 5-pin DIN connectors, for example.

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, 2020-01-09

#include <Control_Surface.h> // Include the Control Surface library
// Select the serial port to use.
auto &serial = Serial;
// Instantiate a Serial MIDI interface at the default MIDI baud rate.
SerialMIDI_Interface<decltype(serial)> midi {serial, MIDI_BAUD};
// You can also use the following serial MIDI interfaces:
// The Serial port that is connected to your computer over USB:
// USBSerialMIDI_Interface midi = 115200;
// A hardware serial port:
// HardwareSerialMIDI_Interface midi {Serial1, MIDI_BAUD};
// 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 the 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.
constexpr auto MIDI_BAUD
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 wrapper class for MIDI interfaces sending and receiving MIDI messages over a Serial port of generic...
constexpr Note C
C (Do)
Definition: Notes.hpp:40