Arcade MIDI Controller




Introduction: Arcade MIDI Controller

I'm sure that you have seen those cool videos of people jamming on a box with a bunch of buttons on it. Well, today, I will be showing you how you too can make a box with which you can make jams. 《 Inspired by the MIDI Fighter Classic

Step 1: The Hard Stuff


16 || 24mm arcade buttons

You may choose the Sanwa variety for quality or the not-Sanwa variety if you're cheap like me and don't mind waiting a month to receive the buttons

6 || 24mm arcade buttons

Of a complimentary colour to match the 〖 a e s t h e t i c s 〗of the other 16 buttons

16 || 2mm LED

I honestly don't know why I picked 2mm LED, the 3mm variety is much more common and don't come in intervals of 100s

4 || 220Ω Resistors (aka computer wire with beads)

For current limiting the LEDs so they don't blow up

1 || Teensy 2.0 microcontroller

Does the buttons to MIDI stuff, you can find them at most electronic stores

1 || 74HC595

Used to control the LEDs

1 || arcrylic enclosure

Feel free to laser cut one out of any 3mm thick material using the provided EPS files, or just get it precut from Ponoko

A Lot || Shrink Tubing aka shrinkydink wrap

The assorted kind is the best.


1 || soldering station

A soldering iron is a inferior, but alternative choice

Some || solder

and flux if you're feeling like it's one of those days

1 || heat gun

For the shrinkydink wrap

Some || glue

acrylic cement, super, gorilla, epoxy, glue gun, or that sorts


1 || multimeter

Used to check if your buttons are working like buttons and other electrical stuff

Some || ribbon cable

Makes connecting the buttons to the Teensy somewhat easier and neater

44 || vinyl double crimps

Makes it a lot easier to attach the ribbon cable to the button leads. I just couldn't find any that was the correct size at Fry's

Step 2: Test the Buttons

As simple as buttons go, it's a good idea to test them to see if they all work.

This is how you can do that:

  1. Set your multimeter to the signal option.
  2. Put each of the multimeter leads to one of the two leads on the buttons.
  3. Press the button.
    1. If beep, your button is indeed a button. Proceed to do this with the rest of your buttons
    2. If no beep, check if your leads are making a good connection
    3. If still no beep, then your button is not a button. Find a replacement button for said not-button.

Step 3: Test the LEDs

Rather be safe than sorry; at least with the buttons, they're relatively easy to replace, but with the LEDs, if you solder them into the matrix and realize one doesn't work, then it'll be sad times.

Step 4: Add the Blinky Things

You might have noticed there are little holes next to each of bigger button holes. As you might have guess, they are for LEDs. The original design were intended to for 2mm holes, but if you would like to use 3mm LEDs, feel free to edit the designs so that they'll fit.

  1. Bend the LED as per the picture, the longer lead inline with the LED body and the shorter lead perpendicular to the LED body (with respect to the long side of the LED).
  2. Snip off most of the shorter lead, and solder a resistor to it. Aside from the fact that you need a resistor to limit the current on the LEDs, I also dun goofed and the LED leads are actually 2 mm to short of being able to solder together into a matrix. This is why I used 16 resistors to extend the lead just long enough to solder it to the adjacent LED to form the matrix.
  3. Lay out the LED resistor combo into the holes to form the matrix. Bear in mind, the lead that stick out should be facing the side with more space. I rotated it 90 degrees, which made some of the leads stick out because I can't geometry.
  4. Solder all the resistor rows together.
  5. Slide on shrinkydink wrap on the non-resistor columns.
  6. Solder the non-resistor columns together and heat gun the shrinkydink.

Step 5: Manual Button Insertion

After you have assembled all the required parts, it's time to put all the stuff together!

  1. Insert the buttons with the two retention chips are vertical, as per the first picture.
  2. The leads on the back should look like the second picture.
  3. Insert a button in ever other hole. YOU MUST DO IT THIS THIS ORDER!
  4. Fill in the the rest of the holes with the remaining buttons
  5. Make sure all the leads are lined up.
  6. Don't forget to do the side panels too.

Step 6: Button Hookup

I'll assume that you are using ribbon cable for this soldering exercise. If you're just using normal gauge wire, just solder a wire to one of the leads on each button, which will go into the Teensy and connect the remaining lead on the buttons together however you like, which will go to the ground on the Teensy.

If you are indeed using a ribbon cable, it is pretty much the same concept, but requires a bit of cable management skills.

  1. Solder one of the pins of each buttons in order of the Teensy pins, skipping over pin 1, 2, and 8 (these will be used for the 74HC595).
  2. Keep track of which button is attached to which pin. It doesn't really matter, so long as long as you write it down somewhere and remember what went where.
  3. Solder all of the second pins of each button together however you like. I chose to wire them out individually and solder blob the ends together. You may choose to do the same, or select a different way to connect them all together.
  4. Take that giant blob and connect it to the ground pin on the Teensy. I used the on programming pin because the other ground pin was underneath one of the panels.

I probably should of taken more pictures for this step.

Step 7: LED Hookup

Remember how I told you to save pins 1, 2, and 8 on the Teensy. Well, this is where you find out why.

  1. Hook up pin 1 of the Teensy to pin 11 of the 74HC595. This is the clock line.
  2. Hook up pin 2 of the Teensy to pin 14 of the 74HC595. This is the data line.
  3. Hook up pin 8 of the Teensy to pin 12 of the 74HC595. This is the latch line.
  4. Pretty much follow this Instructable.

You might wanna test the LED Matrix before you solder anything onto it. I didn't do this and I found out one of the LEDs blew...

Step 8: Close the Box

This is the part where you have to think inside the box, more specifically, it's where the box is put together.

  1. Glue all the sides together.
  2. Glue the Teensy to the bottom panel.
  3. Pop the bottom panel on. You can glue this or just let the tolerance hold it in place. I chose the latter.

Step 9: The Soft Stuff

This is the part where I got kind of lazy (not really, I just have been too busy with other stuff) to write a proper firmware for the MIDI controller. Buttons.ino will allow the controller to be recognized as a MIDI device and you can set it up to work with Ableton or other DAWs. I will update this section with code that animates the LEDs. Sorry...

Step 10: Conclusion

There you have it! You own box of buttons! You can also use it as a keyboard or game controller if you'd like. Maybe for my next project, I'll make one where the buttons light up. Or maybe a unicycle. Who knows? UmamiFish out.

2 People Made This Project!


  • Metalworking Contest

    Metalworking Contest
  • Fix It! Contest

    Fix It! Contest
  • Tiny Home Contest

    Tiny Home Contest

38 Discussions

This is awesome! I actually kind of want to do something like this, but I'm curious; would it be possible to make an all-in-one drum machine? Meaning, instead of the buttons only making sound when plugged into a computer, you could just play it on its own? I'm thinking about making a portable drum machine with different presets, but I'm not sure how to go about doing it.


1 year ago

Great project. Do you think it is possible to use Leonardo pro micro clone instead of teensy?

1 reply

So long as you can use it as a MIDI controller and there are enough pins, then it should work :)

Does anyone know if this would work with multiple button and led colors? I'm kinda new to things like this. Also, what do the side buttons do? (I don't really know :p)

1 reply

You can definitely use multiple buttons and led colours. You can map the side buttons to any function you want. In this case if you're using Ableton, you can use it to slide across the active decks.


1 year ago

Any tips on how to get the LEDs working with as less code as possible? All pointers appreciated, Thanks!

2 replies

For anyone else wondering, I used a teensy++ 2.0 (since that has enough pins to handle all buttons and leds), then the following code works (if you respect the pin numbers or change them of course):

#include <Bounce.h>

boolean debugging=false;

int midiChannel=3;

int buttons[16]= {

26, 22, 5, 27,

25, 21, 2, 0,

24, 20, 7, 3,

23, 19, 9, 4


int leds[16] = {






// variables to store values

Bounce *buttonState[16];

// the setup routine runs once when you press reset:

void setup() {

//arcade buttons

for (int i=0;i<16;i++) {

pinMode(buttons[i], INPUT_PULLUP);

buttonState[i]= new Bounce(buttons[i], 5);

pinMode(leds[i], OUTPUT);



// the loop routine runs over and over again forever:

void loop() {

//read buttons

for (int i=0;i<16;i++) {

if (buttonState[i]->update()) {//state changed

if (buttonState[i]->read()==LOW) {//is pressed

midiNoteOnOff(true, i+26*16 + 4);

digitalWrite(leds[i], HIGH);


else {

midiNoteOnOff(false, i+26*16 + 4);

digitalWrite(leds[i], LOW);



}//end loop


// function to handle noteon outgoing messages

void midiNoteOnOff(boolean s, int n) {

if (s) {

if (debugging) {//debbuging enabled

Serial.print("Button ");


Serial.println(" pressed.");


else {

usbMIDI.sendNoteOn(n, 127, midiChannel);



else {

if (debugging) {//debbuging enabled

Serial.print("Button ");


Serial.println(" released.");


else {

usbMIDI.sendNoteOff(n, 0, midiChannel);




Very elegant code indeed.

If i wanted to create a bank with a pushbutton, press it an release it to go to bank1 and again press it and release to go to bank0 how would you suggest to implement this having a led to view bank0 or bank1?

I am thinking to add an if statement before ..... midiNoteOnOff(true, i+26*16 + 4); and check if i switched to bank1 then send different numbers?

Thank you.

It is possible as long as you have enough inputs on the micro controller. You'd also need to add some code to get that to work. :)


1 year ago

Awesome work, plan on making this but would need the enclosure plans in a format that works with Inkscape, any chance you can convert? Thanks :)

2 replies

I included pdfs now. I hope that works. :)

You can get an I/O expander or a build a matrix using diodes to accommodate for the extra buttons. In terms of LEDs, you might want to look more reliable ways of driving 64 LEDs. You can also buy chainable LEDs which might make your life a little bit easier.

You can also read the instructions four times :D

what should be changed if i replaced teensy with arduino?

1 reply

You will probably need some sort of I/O mux or expander (depending on which version of the Arduino you have). You can also look into making a matrix with diodes, which can also solve the issue of not having enough GPIOs.


2 years ago

How did you get 16 buttons to work. doesn't it only have 25 I/Os?

2 replies

There's actually 22 buttons on the controller. There just so happens to be enough pins on the Teensy to have each button on an GPIO.

How many buttons can be mapped if you don't use the LEDs? I've been researching this like crazy because I'm looking to make a foot pedal midi board. Awesome work btw