MIDI Control Board

An Arduino Mega based MIDI Controller device for Guitarix.

Similar projects worth following
A multi-module, simple MIDI based controller that sends control change instructions through USB using an Arduino Mega 2560 based board. In my case, the receiving end is a PC based guitar processing software (running on ubuntu), Guitarix.

I am a user of Guitarix as an amp/guitar processing unit on a PC. I was looking to build a MIDI controller that I could stomp with a foot to toggle individual processing units on/off, and to also carry a few potentiometers that could change the parameters of these processing 'pedals'. 

This somewhat modular device was built with each 'module' dedicated to one pedal. Six mini-circuits were designed to be identical  - keeping the design exactly the same for these helped keep the costs low - even if some modules used less than the 3 potentiometers, or no digital connections at all in some cases. I also had printed mini-boards to go on top of the arduino headers in lieu of full sized shields.

Thanks to the "Control Surface" library, the code for this was ultra simple.

The min-circuit modules:

Each module contains three 3-pin headers for potentiometer connections, and two 2-pin headers, one for the toggle button (foot operated), and one for the LED showing whether or not that toggle is currently engaged.

Here is what each module looks like (designed using DipTrace);

On the top are 5v and Ground input pins (V1 headers) that also have a direct connection to another header on the other side of the board (V2). This allows me to daisy chain the modules and use a single 5V, GRN  pin set on the Arduino for all six modules.

Three of these modules are on one side of the board, and three others on the other - so those are designed to be mirror images of this board.

The Mini Breadboard like units on the Arduino headers

Additionally, also using Oshpark, I had printed six units of these mini-breadboards with 8-pin headers that I could then plug in directly on to the female headers on the arduino board. Right angled pin headers then helped plug in 3-pin and 2-pin dupont connectors from the individual modules to the appropriate analogue and digital locations on the arduino.

Potentiometer breakout boards:

The pins on a standard 10K 3-pin potentiometer are - G, S, V. In order to fit that into my V, G, S design, I built this potentiometer breakout board:

Other Hardware:

The top and bottom panels are 1/4" thick acrylic panels measuring 4.5"x18" each. I used a 9"x18" piece that I cut into two to make these panels. The cutting was done using a bandsaw. A tip for anyone else trying to cut acrylic sheets - do it in a well ventilated area - the chemical odour is very strong, and lingers for a long time. The two pieces are held together using 2" high "sign holders".

Future Considerations;

I might elevate the backside a little bit to have this sit on the floor at an angle, rather than sit flat.

The module circuit design has three right-angle trace corners - at 5v levels I am not sure how much that would matter, but if I did this again, I would fix that.


Arduino code

ino - 3.47 kB - 10/23/2021 at 21:49


  • 1 × arduino mega 2560
  • 14 × 10K potentiometers
  • 5 × Foot toggle switches (non-latching)
  • 5 × LEDs with appropriate resistors
  • 1 × TRS jack A TRS female jack to insert an expression pedal

View all 7 components

  • 1
    Prepare the arduino board to be a MIDI output device

    In order to transmit MIDI over USB, the firmware of the USB-to-serial chip (a MEGA16u2 chip) needs to replaced. Follow the steps here for best results; ATmega16U2 Flashing MIDI Firmware. Note that once this has been flashed, the USB connection can no longer be used to flash the arduino program code. I used this programmer to do that following flashing the MIDI firmware: Sparkfun AVR programmer. This is tool is optional, but very handy. Otherwise, one needs to constantly switch between firmwares to reflash any changes to the code.

  • 2
    Build the module circuits
    1. Solder 3-pin male headers to the pads labelled A1, A2, and A3 - these will be receptacles for the potentiometers.
    2. Solder 2-pin male headers to the pads labelled D1, and D2 - these will receptacles for the LED and the toggle buttons.
    3. Solder right angles male headers to V1, V2 (facing the other way), A, and D - these will be used to connect to the arduino, or to the adjacent board (in the case of V2)
  • 3
    Build the mini-board circuits
    1. Solder an 8-pin male headers set in the middle row of each of these boards (I needed 5 boards to cover the power area, the two analogue connections area, and the two digital connections area). I did not use the digital connections double pins on the back of the arduino in this project.
    2. To either the front row or the back row, connect right angled pins - these will be where the module circuit connections from either the right side of the arduino or the left side of the arduino will connect. In the case of the 5V, and GRN pins, use right angled pins on both sides of the middle, since these will power the modules on either side.
    3. Push these into the female headers on the arduino appropriately 

View all 7 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates