Introduction: DIY Arcade Joystick
This is an arcade joystick I made.
The arcade joystick itself is made from scratch using micro roller switches, no pre-made arcade joystick module used before hand. I got this idea from someone in the 2016 Maker Faire Singapore, where I remembered someonedone the same thing, except way better than mine.
The arcade buttons were regular $2 Arcade buttons, basic but way better than your typical tactile switches.
Step 1: Case and Electronics
The case is made out mainly of Acrylic pieces. 1 black piece was bent at 4 joints to make the sides, 1 cleared piece was covering the bottom. A white piece and another type of clear plastic (not acrylic, a thin piece of plastic, from some packaging) was used to cover the top and mount the joystick and buttons respectively.
Holes were cut into the top pieces of plastic to mount the Arcade buttons, and for the stick of the joystick to be slid in and used.
As for the wiring, I basically connected all the switches and buttons to ground and left an extra pin to be connected to the gpio to an input pullup for the microcontroller.
Step 2: Joystick
The main stick of the joystick is a wooden dowel, cut appropriately to size.
The roller switches would have to be hot glued on the back side of the white piece of acrylic, at the edges of the hole for the dowel.
The idea would be to glue the switches such that whenever the stick moves up, down, left or right, a corresponding switch would be pressed. Keep the switches close together such that when the joystick moves diagonally (eg up-right) , 2 of the respective switches would be pressed.
However, take note to adjust the position of the switches (how close it is to the hole) before hand, to the sensitivity you want. Else, you will get into a big mess when changing it. When you are satisfied, you can put the case together and move on to the next step.
Step 3: Microcontroller and Additional Electronics
You could use any microcontroller with HID functionality (preferably USB, because wired rules), like the Arduino Leonardo (Though its slow), Teensy, or Bluetooth HID like the Adafruit Bluefruit EZ-key. In this case I used a Teensy 3.2,
Take note to wire the switches correctly. When you move the joystick in one direction, you are actually pressing the switch in the opposite direction (Move up presses the down switch). So the down switch should be mapped to up, left mapped to right etc.
When using the Arduino IDE, use the functions Keyboard.press() and Keyboard.release() to map each button to each key. Don't use Keyboard.print() as that is slow.