DIY Arduino Based MIDI Foot Controller




Introduction: DIY Arduino Based MIDI Foot Controller

I've been wanting to try a guitar looper for a while, but I don't like the idea of expending money on a looper specific pedal when I can use a computer for that and since I've been learning arduino for fun made perfect sense to make a an arduino based controller.

After some experiments and search on the web I found a similar project, and that pointed me in the right direction, this lib that provides basic MIDI device functionality for arduino.

so far this project has been lot of fun, and now I have more ideas I want to try when I have the time.

Step 1: Build Process

I wish I had taken pictures of the building process, but I didn't, sorry.


  • Arduino Leonardo
  • prototype board
  • pin headers
  • 10k resistors
  • push buttons (normal open)
  • wires
  • enclosure


  • Soldering Iron
  • wire cutters
  • hand saw
  • multimeter


I tried using some metal push buttons but they were expensive, not very reliable (the ones I got anyways) and very noisy. so I decided to try microswitches. these worked just fine. on the next version I'll probably try using arcade switchesm but YMMV.

Start by deciding how many switches you need in your foot controller. find or build a case that will be able to hold everything.

layout how you want your buttons to be and drill the holes for them

then connect the switches to the arduino. you can go many ways about this, what I did was to create a shield with a protoboard and some pin headers.

remember to ground each of the input pins with a 10k resistor.

Step 2: Program the Arduino

  1. Install the Arduino IDE (download it from ) install into your computer
  2. clone this repo you can fork it if you plan to change the code to suit your needs
  3. select artcore on the board selection

  4. change the scketch to suit your needs

  5. compile and upload the scketch to your arduino (I used Leonardo)


I found out the hard way that some bad soldering can create some weird bugs, this MIDI monitor software is really helpful to understand what was happening ( )

Now it's time to connect the foot controller to your computer, launch your DAW and configure it to use the controller. you should see it as a usb midi device. I tried it on OSX and Linux and didn't need any special driver

IMPORTANT: if you are going to change the code do not try to use Serial to log messages into the console, that won't work since the serial is being used to create the usb midi device.

Whats next

I'm planning on creating another foot controller with many more switches, and if I figure it out how to create the chasis, an expresion pedal.

and also another, lets say "desk" controller with faders and some buttons to control the DAW on live situations.

Arduino All The Things! Contest

Participated in the
Arduino All The Things! Contest

Be the First to Share


    • Home and Garden Contest

      Home and Garden Contest
    • Trash to Treasure Contest

      Trash to Treasure Contest
    • Science Fair Challenge

      Science Fair Challenge



    1 year ago

    can i use this on Arduino UNO ?
    with the same code


    Reply 1 year ago

    the code itself should work, what you must check is that the arcore library that this controller is based on works with whatever board you want to use.


    6 years ago

    maybe you didn't install arcore correctly (follow the instructions on their README) and / or didn't selected the right board on the IDE?

    let me know if I can help any further. also bear in mind that arcore works with Arduino Leonardo mostly, I'm not really sure works with any other.


    6 years ago


    sketch debug says:

    sketch_jan29a.ino: In function 'void controlChange(byte, byte, byte)':
    sketch_jan29a:60: error: 'MIDIEvent' was not declared in this scope
    sketch_jan29a:60: error: expected `;' before 'event'
    sketch_jan29a:61: error: 'MIDIUSB' was not declared in this scope
    sketch_jan29a:61: error: 'event' was not declared in this scope
    sketch_jan29a.ino: In function 'void loop()':
    sketch_jan29a:99: error: 'MIDIUSB' was not declared in this scope

    what's wrong?!!



    6 years ago

    Update: I changed the sketch on GH so it uses one of the buttons to alternate between 3 banks, so this controller can send 9 different controls instead 4.

    I'm planning to implement some sort of bank display. probably three leds or a proper display.