Introduction: Custom MidiController

Hi everyone! This is an instruct-able for a 4 X 4 button midi pad controller with 3 functional side buttons, one rotary pot, and LED effects. Using the teensy 2.0 ++, we can send MIDI through USB. This allows your controller to work on Ableton and other music software

I used the dj tech tools teensy instructions for the soldering part but I added different features and buttons on my controller. My midipad is sending notes instead of CC values and the code is cleaned up to map to ableton. I recommend watching that tutorial while reading this one. Also side note, Pins 5, 6, and 7 do not work properly on my teensy so I skipped those pins and so buttons 5, 6, and 7, are attached to pin 20, 21, and 22.

I'll also include the python and configuration scripts to automatically map your controller.


19 30mmsawha arcade buttons

1 Teensy 2.0 ++ micro controllers

1 10k volume potentiometer

2 mini breadboards with ground and power rail.

1 Large pack of male to male jumper wires

1 Large pack of female to female jumper wires

9 adafruit flora 2.0 neopixels

1 6X6X2 inch box

I mostly did my shopping online and everything came out to be around 90 dollars. Ill get the full cost later. The most expensive parts were the arcade buttons believe it or not. Make sure to have your Teensy Bootloader installed on your arduino IDE. To do that just go to the PJRC website and under their download section, install Teensy Bootloader. This will allow your arduino IDE to run Teensy products and also change the output of your Teensy from serial to USB MIDI.

Step 1: Step 1: Soldering and Testing Sanwa Buttons

I soldered my sanwa buttons and tested my teensy on a breadboard first. The Sanwa buttons are pretty easy to solder. You have one pin for ground and one pin for the input. It does not matter which one is the ground and which one is the input. Then I soldered pin headers onto my teensy so that it can be used on a breadboard. You can also buy teensy that already have soldered pin headers for 2 to 3 dollars more.

I then tested the button inputs on my teensy on the arduino IDE and then on Ableton. If you are not modifying this project any way then, ignore the testing. You can just pull up my full code later in the instructable. Make sure to have your bootloader installed and change the board to your Teensy and the USB output to MIDI. This can be found under the tools section of your Arduino IDE.

Simple one button test arduino script:



int c6_note = 60;

Bounce test_button = Bounce(0,3);

void setup() {



void loop(){



usbMIDI.sendNoteOn(c6_note, 99, 3);



usbMIDI.sendNoteOff(c6_note, 99, 3); }



Run the code and load it to your teensy. Then attatch your arcade button input pin to the teensy digital pin 0 which is pin D0 on the teensy 2.0++. Ground the other wire. If everything is working properly, when you load ableton, when you press the button, ableton will let you know there is an input next to the MIDI field on the upper right hand corner.

Congrats you successfully sent a midi note to Ableton! You pretty much do this 19 times changing the Bounce parameters, pinMode, and note for each button.

Step 2: Step 2 Soldering and Testing Analog Pot

If you get a heavily resisted pot, it will mess up your readings so stay around 10 to 50k rotary pots. I found most of mine on spark fun. Pots are really easy. the left most pin is your power and you will be attaching this straight to your teensy power line. (when you bread your teensy, make sure to connect the breadboard power rail to the teensy 5v power) The middle pin is for your input and make sure to wire this to your first analog pin on your teensy. On the teensy 2.0++ this is pin 38 but its also called analog pin 0. I believe pin 38 down are all analogs so you can add more rotary pontentiometer if you want to. Attatch the last wire to your ground. The code is very similar to the testing of arcade buttons.

Pot test


int prev_analog;

int curr_analog;

int cc_value;

void setup(){

//this is the pin you are attatching too. It is pin 38 on the teensy 2.0++ but it is also read as analog pin 0



void loop(){

curr_analog = analogRead(0);

if(abs(curr_analog - prev_analog)>10){

cc_value = curr_analog/8;


prev_analog = curr_analog;




Your analog rotary should now be sending cc values to ableton

Step 3: Step 3. Neopixels

You can actually find all the neopixel code you need from adafruit. Just use their tutorial.

Step 4: Step 4: the Case

I 3d printed my case and I'll include all the sketch up and makerbot files here. You might have to sand down some holes depending on your wire and pot sizes.

Step 5: Step 5: Attatch All Your Buttons and Lights and Load Up the Code!

My midipad is sending notes so you can use it on the drum rack but you can change this to CC values easily(Check DJtechtools teensy tutorial on this). Place your neopixels anywhere you want and place your bread board on the button of the case. I'll attach my code here. Pins 5,6 and 7 were not working for me so for those digital pins I used pine 20, 21, and 23.