Turn a Thrift Store Joystick Into a MIDI Controller

Complete Flight Controller MIDI Controller assembled

Look, I love the thrift store. They have things that can be turned into other things, and for not very much money.

The concept here is simple – Flight Sticks / other old input devices with buttons and knobs are really just a collection of buttons and potentiometers. These are just about the easiest components to use with a microcontroller (Arduino, Raspberry Pi Pico, etc.). All we really need to do is:

  1. Figure out which wires go to which buttons / potentiometers
  2. Solder those to the appropriate pins on a microcontroller
  3. Mount said microcontroller in the case somehow
  4. Tell the computer (AI) what you are using, how it is hooked up, and make it write the firmware for you

Choosing a controller

Older is usually better / easier. Bigger wires that are easier to follow, etc. But even modern ones are fine – you might just have a PCB to rip out and toss out.

Beware of the old arcade-style-looking joysticks. Those often just have 4 buttons – up, down, left, right – rather than potentiometers. Unless that’s what you want, of course.

Also avoid anything with TOO many buttons. Often when there are more than 5-10 buttons, there ends up being circuitry involved (button matrix) instead of a simple “2 wired for each button” setup like mine here.

Step By Step

1. Disassemble

Self-explanatory. Note some screws may be hiding under rubber pads.

2.Figure Out Connections

Visually figure out which wires map to which button / potentiometer terminals and confirm with a multimeter. Take good notes.

3.Map Inputs to Your Microcontroller

You need a microcontroller that has enough ADC pins (Analog to Digital Converters). The Rasperry Pi Pico is $4 and has 3, which is what I used here. You will need one digital pin for each button.

See below for how I mapped mine to my Waveshare RP2040-Zero (Raspberry Pi Pico, but smaller footprint + USB C).

4. Mount the Microcontroller

Basically you need a hole for the USB cable to get through to the microcontroller input. In my case, I cut a USB-C sized hole in the case, 3D printed a little spacer, and hot glued everything in place.

5. Re-Assemble

Use tape or a spot of hot glue to hold any wires in place where you want them. Then put it back together.

Note that in my case, I drilled 3 extra holes in the case and added 3 additional switches.

6. Software

Basically follow any guide for how to make a USB MIDI controller with your microcontroller of choice – plenty of great guides on the internet. I used a Raspberry Pi Pico and CircuitPython. Check out these links:

https://learn.adafruit.com/midi-for-makers/overview
https://learn.adafruit.com/midi-keyset/overview
https://learn.adafruit.com/prop-it-game/circuitpython

Alternatively, and this is probably my recommendation if you just want to get it up and running fast – describe your setup to any AI model, and tell it what you want it to do. Here is an example prompt for my specific setup:

I'm using a Raspberry Pi Pico connected to a joystick and some buttons. Write the firmware in CircuitPython for this project and then tell me how to install it and test. 

There are 2 potentiometers for the 2 joystick axes. They are connected to GP28 and GP29. A third knob pot is connected to GP27. There are 2 buttons connected to GP0 and GP1 and GND. 

I want each axis direction - up, down, left, right - to send separate CC messages. When the joystick is at center, nothing sends. At any extreme, it sends value 127. So 4 CCs that send values 0-127 depending on how far it's tilted in each respective direction. The buttons are momentary toggles - send 127 when pressed, and 0 when released.

Create a settings.json file where I can modify the CC mappings and settings easily. 

Consider calibration / deadzone settings. Recommend how to handle this based on my setup. Also consider if and how we should smooth the output, since microcontroller ADCs can be a bit jumpy.

Before starting, ask me any additional questions you have.

Conclusion

There are tons of old input devices available out there. This is a cheap and beginner-friendly DIY MIDI project, and the result is something useful that you can’t just buy. Also, reusing old soon-to-be garbage is always a plus.