DIY Arcade Rythm Game Controller




Hello! I recently just finished my big project on a SDVX controller, a controller made for a specific rhythm game that I like playing at arcades. I built this because the arcade that has the game I like is 20 minutes away, and costs money to enter. The price of a normal SDVX controller is around $170, and I didn't want to pay that much so I made my own at home.

The Problem: Most of the guides to make the controller use expensive parts out of my budget or have links that are now invalid, so figuring out which parts to order was hard. Also the guides are usually made assuming that the person reading knows what their doing (not in the case of me), so that was also a struggle. 

The Solution: I talked with some people in a discord community who like building DIY rhythm controllers for help and used that as a main way to figure out the whole thing. I also used my previous electronic/coding knowledge to give me an extra push when adding a feature or figuring out how to wire everything. 

Disclaimer: I used existing code from the SDVX controller guide, and I altered it to work with the parts I bought and added a button press feature to switch between to modes. 

1. Understand why it works (Coding):

    a. The button function

    

The actual code runs similar to this example: It checks if the button has been pressed, and then alerts the microcontroller triggering a keyboard press. In simple terms (The button sends out a signal to the processor when pressed which is read and converted into a keypress). 

The reason why an Arduino Leonardo is used, is because it has a decent amount of pins open, and has keyboard and mouse control functionality. 

    b. Rotary Encoders (Knobs) 



Rotary encoders use three pins and output a voltage through pin A or pin B outputting values telling if the knob turned left or right. 

This vid explains it really well in detail, and helped me understand how it works: (FriendlyWire)

In coding, the encoder pins are attached to interrupt pins on the Arduino. This means that if a change is detected on the interrupt pins, the code jumps straight towards it. 

The code that I am using for the rotary encoders basically just detects if the knob has been turned, and increments an array telling it how much it should move the mouse position of the x or y axis. 

These mouse movements are detected by the game and are read as the right and left beams that turn in the game. If you want to fully understand how all the code works, I suggest you use the help of an AI such as ChatGPT with the code as a source. It's a great tool for explaining or learning, and can explain the whole process in detail better than me.  

2. Understand how it works (Electronics Part):

    a. Arcade buttons/microswitch

Connecting the micro switch | Arcade, Retro arcade, Diy arcade cabinet

The top of the switch is triggered by a button that pushes down on it, sending a signal to the microcontroller that is read as a keyboard press. Normally open means that it outputs a signal only when pressed as the circuit is open until it's pressed. While building, connect the normally open part to a analog pin. 

Baomain Blue Female Insulated Spade Wire Connector 3/16'' Electrical Crimp Te... - Picture 1 of 6

For the actual electrical connection, I suggest using a spade crimp for the buttons going to GND since it makes the wiring a lot less messy. For the buttons going to the microcontroller read pins, use a spade crimp and connect the normally open pin to the corresponding pin on the Arduino. To understand how to use the spade crimps properly, I linked a Youtube tutorial on how to create one for GND below. 

If you don't want to use spade crimps for whatever reason, you can use alligator clips to male header pins with a breadboard to make the wire connections. If you do choose that method, the wiring should be similar to the image shown above. Ground all the buttons on a breadboard, and connect the open button inputs to the corresponding ports below.


 

With the rotary encoders, hook up Pin A and Pin B to pins {0, 1, 2, 3} since those are interrupt pins. The electrical connections can be made by soldering a jumper wire onto the pins. Make sure you ground the encoders before plugging the microcontroller in. 

The LED pins are optional, you would have to alter the code a little bit but it is pretty easy to do.


4. Final Thoughts

Overall this project was fun for me and allowed me to apply some of my skills to actually building something physical. Main takeaways I would say are to do research fully so you don't end up with a wiring mess like me. If you have any questions, I check my email at adamkhaq@gmail.com. 

Reference Videos for skills:

Parts Used (Cheap Budget Build):

Alligator Clips to Male Header  (Recommended Switchout -> Spade Crimps) 

Breadboard

Beatmania Arcade Buttons (Repurposed)

Bourns 24PPR Incremental 6mm No Detent Rotary Encoders  x2

SDVX DIY Knob x2

Arduino Leonardo

Jumper Wire Kit   (Recommended Switchout (If using crimpers)

Cardboard box    

Required Tools (Soldering IronSolderSolder Sucker (For Messups), Boxcutter)

I used really cheap tools to start off, I'd recommend you get a actually good kit off of amazon if you are going to stick with doing electronics.


A little better quality (Recommended)

Spade Crimps

Raw Jumper Wires

Requires tools for crimping (daisy chain) method (Wire Crimper/Cutter/Stripper)


Altered code for these parts: 

Github/AdaoH3


Guides/Code used for reference:

//I altered these guides a bit for my own resources

Guide: ConsNStuff

SDVX Controller Code: Code Reference



Comments