- Eventide Audio

Home Forums Products Stompboxes Cheap DIY Midi Controller Reply To: Cheap DIY Midi Controller


ok people. cleanest codeset yet. 

Incluses a spot for an expression pedal (or multiples) as well as a VOLUME BOOST with an LED toggling it’s state. This might break with a Preset switch, but will reset if you hit it a couple times.

Lets see if I can get it to paste correctly. If not, download here:



//midi.controller for eventide H9

//by Cameron Newell @the.nw.enterprise, http://thenorthwestenterprise.com/

//Built for Ardruino NANO EVERY


#include <Control_Surface.h> // Include the library 


// Instantiate a MIDI interface

USBDebugMIDI_Interface usbmidi(115200); // uncomment this for serial monitor in ide

//HardwareSerialMIDI_Interface serialmidi = {Serial1, MIDI_BAUD}; //uncomment this for 5-pin operation- this sends on TX **may need to rename Serial1 vs Serial

//USBMIDI_Interface midi; // uncomment for native MIDI over USB

//HairlessMIDI_Interface hair (); // uncomment this for Hairless


/* Instantiate PCButtons that read the inputs from a push button and sends out a MIDI Program Change message when they are pressed.


This setup matches PC to PIN Number


PCButton pcBtn2 = {2, {0x02, CHANNEL_1},};  //PC#2

PCButton pcBtn3 = {3, {0x03, CHANNEL_1},};  //PC#3

PCButton pcBtn4 = {4, {0x04, CHANNEL_1},};  //PC#4

PCButton pcBtn5 = {5, {0x05, CHANNEL_1},};  //PC#5

PCButton pcBtn6 = {6, {0x06, CHANNEL_1},};  //PC#6

PCButton pcBtn7 = {7, {0x07, CHANNEL_1},};  //PC#7


/*Hotswitch or other cc function will fire 127 on press and 0 on release by default. This is overridable. Use a momentary switch, like the others.

Assicn CC number from here, precede HEX with 0x



CCButton button08 = {8,  {0x10, CHANNEL_1},};  // CC#16

CCButton button09 = {9,  {0x11, CHANNEL_1},};  // CC#17

CCButton button10 = {10, {0x12, CHANNEL_1},};  // CC#18

CCButton button11 = {11, {0x13, CHANNEL_1},};  // CC#19


/* Instantiate a latched push button that sends MIDI CC messages for a BOOST function

This still uses a momentary physical switch. Assign to Volume in H9 control

Default values overriden. Adjust to boost strength preference


CCButtonLatched boost = {12, {0x07, CHANNEL_1},{ 127, 80 }};  // CC#7 – VOLUME BOOST

const pin_t BoostLed= {13};  // The LED to display the state of the boost button.


/* Instantiate an analog input for an Expression pedal

This ia an analog POT with 5v, Ground and Signal. **may jitter**


CCPotentiometer potentiometer = {A0, {0x0B, CHANNEL_1},}; // CC#11, pot wired to pin A0


void setup() {

Control_Surface.begin(); // Initialize main Control Surface code

pinMode(13, OUTPUT);  // assign Led pin as output pin



void loop() {

Control_Surface.loop(); // Update the main Control Surface

digitalWrite(BoostLed, boost.getState() ? HIGH : LOW); // Update the LED state to reflect the toggled switch state. Match name of led to name of button