This is an old version of the documentation. View the latest version here.
Control Surface  1.0.0
MIDI Control Surface library for Arduino


#include <Encoder.h>
// Encoder must be included before Control Surface
// MIDI Interface to use
// Bank with 120 settings in total, increments of 1 address at a time
Bank<120> bank = {1};
// A rotary encoder to select one of the 120 bank settings
bank, // bank to manage
{2, 3}, // encoder pins
4, // encoder pulses per step
Wrap::Clamp, // clamp or wrap around when going beyond maximum/minimum setting
// The potentiometer that sends MIDI messages
// the address (controller number) depends on the bank setting
Bankable::CCPotentiometer potentiometer = {
{bank, BankType::CHANGE_ADDRESS}, // Bank configuration
A0, // Analog pin for potentiometer
{0x00, CHANNEL_1}, // Base CC address
void setup() {
void loop() {
// You can get the bank number using:
// bank.getSelection();
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
Definition: USBMIDI_Interface.hpp:43
A class that groups Bankable BankableMIDIOutputs and BankableMIDIInputs, and allows the user to chang...
Definition: Bank.hpp:77
The main header file that includes all Control-Surface header files.
A class of MIDIOutputElements that read the analog input from a potentiometer or fader,...
Definition: Bankable/CCPotentiometer.hpp:22
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
Definition: Control_Surface_Class.cpp:171
Selector that reads from a rotary encoder.
Definition: EncoderSelector.hpp:78
void begin()
Initialize the Control_Surface.
Definition: Control_Surface_Class.cpp:22
Change the offset of the address (i.e.
Definition: BankConfig.hpp:17
When the maximum (minimum) setting is reached, clamp to the maximum (minimum) setting.
constexpr Channel CHANNEL_1
Definition: Channel.hpp:111
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
Definition: Control_Surface_Class.cpp:45