Arcade Warrior (Midi Fighter Pro clone)

Exams are finally over and I can spend much more time experimenting with controllers without any traces of guilt. The major highlight for this post will be my new Arcade Warrior controller, a shameless rip-off of the Midi Fighter Pro (thank you DJTT for being such a great source of inspiration), and the Teensy++ micro-controller board.

I will start off real quick with Teensy++, it’s a very nice and small AVR micro-controller, very similar to Arduino. In fact you can use the Arduino IDE and libraries to program Teensy, which is amazingly handy! But the reason I chose to try it was because of it’s MIDI Class Device support, something that Arduino can’t do. This means that it can act like any professional plug-and-play MIDI controller, no drivers, compatibility layers and virtual MIDI ports required!

Of course to test it out in practice, I had to build a new controller. And this one I wanted it to be a really fun to play and cool looking device, and what suits better than the old school arcade games that we all loved as kids. 🙂 I wanted to build something as expressive as the Midi Fighter Pro, but throw couple of more extra controls in there and a Pac-Man era joystick. Also being able to use Midi Fighter’s already very developed Traktor mappings would save me tons of time and effort. Fortunately all the MIDI signals documentation and mappings are publicly available at DJ TechTools so it was very easy to implement.
Armed with ergonomically placed rapid fire arcade buttons, smooth professional audio gear potentiometers and the joystick controlling expressive gestures, it turned out to be a very nice and responsive controller.

PS: After a lot of questions about the wiring of the buttons I decided to update this post.
One of my goals when building this controller was to make things as simple as possible and use the least number of components. That’s one of the reason why I have included only 3 LEDs. The buttons and Joystick are wired in a very simple manner. All the ground pins (white cable in photo) are daisy chained together and end up on the ground pin of Teensy and all the colored wires are connected to one Digital Input pin on the Teensy, so no resistors required. In order to use this method, you have to enable the pull up resistor for each of the pins in your microcontroller, and this is done by setting the pin mode to pinMode(buttons[i],INPUT_PULLUP); during initialization.
Also note that if you use the pin 6, which is the one that has a LED on the Teensy, you have to set it to pinMode(6,OUTPUT); in order for it to function like the rest.
Finally, since now the buttons operate in active-low logic, this means that if the button is pressed it becomes LOW other wise its HIGH, you have to check for button presses like this if (buttonState[i]->read()==LOW)//is pressed

Also all the analog controls are routed through the breadboards and ribbon cables directly to one analog input on the Teensy.

Here is one simple diagram and a photo of my wiring. Hopefully this clarifies things.

Enjoy and keep your emails coming!

21 thoughts on “Arcade Warrior (Midi Fighter Pro clone)

  1. How did you made that faceplate? it looks amazing!
    And how hard is it to program a Teensy++? i have almost 0 experience in programming, wil it be possible for me to do something like this?

    Thanks in advance

    • Hello Rutger,
      Thanks a lot! The face plate was designed in Inkscape and then cut out of cast acrylic with a laser cutter. If you can find a local plastics manufacturer or some one who provides such services it’s very handy. Or you can use online services like this
      For the programming part I would say it’s fairly simple even for beginners. You can find tons and tons of easy to follow tutorials. Also you can use the Arduino IDE to program it which makes it even easier. I will provide my source code here soon enough that should help too.

  2. This is an amazing idea. I was going to order up a midifighter pro cue master but i like the idea of building out my own tech.

    Any suggestions for coding the Teensy that would suggest for someone who doesn’t code that often?

  3. I came across your source code for this project on GitHub. I compiled it to discover you had changed the Bounce class.

    Anyway, I presume you just made a constructor without arguments. What I can’t get my head around is why you would do this. There is no need to do it. The correct way to do it is to declare an array of Bounce pointers and initialise the array at startup. This way you don’t have to hack perfectly good working classes.

    • Thanks for pointing that out, you are absolutely right. I must have confused things with Java and totally ignored pointers. I will update my source code right away.

  4. Hi!
    Could you give a quick list of the component’s reference (where you baught them especially)? That would be very nice of you 🙂
    Great job by the way!

    • most of the electronics were from Spark Fun, arcade buttons and caps from DJ Techtools and the potentiometers are Bourns from Mouser

  5. Hey there! how much success have you had assign custom midi configurations with this in ableton live? I’m trying to build my own teensy controller right now, and ableton’s custom midi mapping is being completely unresponsive. Any help would be greatly appreciated!

  6. Hey! I’m curious where you got your potentiometers? Also, do you have the part number? I’d like to find some that are compatible with the Chroma Caps from DJTT. Thanks for your help!

  7. hi, Im planing on building something like this
    I just cant figure out what type of potentiometer use, can you please tell me what values you used on the pots, the slide and the knobs?
    by the way, great job!

  8. sir, i want to make a controller having 12 rotary potentiometer and one slider pot and 18 arcade button..and i wanna use teensy…can you help me to write the program.(i have no idea about programming) or can you provide me the codes for my query..i will be very helpfull..

  9. Hey mate-

    I don’t know if you will get this but I hope you do.

    How did you wire the Joystick? I have the exact one and am currently trying to achieve exactly what you have here. Was it each of the two reciveres plugged into the digital inputs or would it all be considered an analog?

    Thanks for the help.

  10. so, i was thinking a joystick could be used as an xy controller, but you mentioned its like connecting 4 buttons.. Would you know what could be used as that??

    • You can use it as a Rotary Encoder. A long as you hold it right, increase the value, as long as you hold it left decrease the value, etc. Same for up and down.

  11. Hi, Tomashg, can i upload your code straight away to the teensy++ and connect all pots and buttons respectively(all of the pins on teensy) is that so simple?

    Thank You

Comments are closed.