For nearly twenty years, I've had a metal RedOctane DDR pad (model: PXMTP) sitting alone and forgotten under the basement stairs in my parents' house. While contemplating ways to exercise at home without buying a bunch of equipment, I rediscovered the pad and thought DDR would be a great way to get my heart pumping. Unfortunately, the pad only has cables for the PlayStation 2 and original Xbox, making it useless for modern technology. Fortunately, those cables are not hard-wired directly into the pad - they're part of a control box that the pad connects to via a DE-15 connector. By swapping out or modifying the control box, it would be possible to have the pad connect to a computer via USB.
Get the DDR pad connected to a PC via USB so that it can be used with StepMania and RetroArch.
As luck would have it, a USB control box already exists for the RedOctane Afterburner DDR pad. Goal achieved! Thanks for reading.
... Except the control box costs a whopping $65 dollars, and it's unclear whether or not it would work with my pad. When Googling "RedOctane Afterburner", most results point to a different model (PXUMTP) that uses a DE-9 connector. Given the similarity in model names, it's possible that mine was a different revision of the Afterburner, but the store page for the control box doesn't clearly show which DE connector it uses. I did find a single eBay listing for the PXMTP that included a USB control box that looked the same, so 🤷. Regardless, $65 is too steep! Disqualified.
The original Xbox controller connector is secretly a USB cable in a proprietary housing. As a result, it's possible to purchase an adapter or modify the cable to use a standard USB-A connector. Ready-made adapters seem to be pretty cheap to buy - around $12 via Amazon - making them an affordable option. However, the primary concern for this solution is whether or not there will be driver support for a converted controller.
For Windows, it looks like Xb2XInput could work, though the developer specifically mentions that they haven't tried using any DDR pads and don't officially support them. Personally, I want to use Linux, and it sounds like the xpad kernel driver would support a converted original Xbox controller.
Ultimately though, I'd prefer to have a solution that makes the pad look like an XInput device to the PC, without requiring additional software. In my experience, XInput devices generally "just work" on both Windows and Linux, and enjoy ubiquitous support in games.
Using a microcontroller, it could be relatively straightforward to create a custom control box. With a male DE-15 connector that gives easy access to its individual pins, the microcontroller could monitor the signals on those pins and send appropriate XInput data over USB. A search for "Arduino XInput" quickly reveals the Arduino XInput Library, which should make it easy to send such data, and the library supports an assortment of Arduino, SparkFun, and Teensy microcontrollers.
Creating a custom control box has additional benefits beyond allowing the pad to act as an XInput device. By having control over the software running on a microcontroller, I can reprogram the pad to behave in whatever way I need or want. This would be most valuable if I later decide to upgrade the pad to use force-sensing resistors, replacing the crude contact sensors it came with.
Among the microcontrollers supported by the Arduino XInput Library, the Teensy-LC is the cheapest, and is also small enough to fit in the original control box enclosure. Looking at the hardware specs, the Teensy-LC also seems to outperform the similarly sized Arduino Micro and SparkFun Pro Micro while being 1/2 to 2/3 the cost.
The DE-15 terminal block breakout can be easily removed from its plastic case - it simply slides out. It's a good thing, too, because its case is too large to fit in the DDR pad's control box enclosure.
I used pins 14-19 on the Teensy since these are the lowest-number pins that support analog signals. For now, only digital pins are needed, but if/when I upgrade to FSRs, I don't want to have to rewire anything or change constants in the code. Here's the wire layout:
|Teensy Pin||DE-15 Pin(s)||PXMTP Button||Wire Color|
|GND||3, 5, 15, GND||-||Black|
I was planning to also hook up the control box's START/SELECT buttons, but accidentally melted the inside of the START button when de-soldering the wires connected to it. With START broken, I convinced myself that I didn't really need SELECT, either - the up-right arrow will be used to confirm menu items and the up-left arrow will be used to go back. For all other inputs, the PC will use a wireless keyboard/mouse. With that out of the way, I re-purposed some of the black wire from the START/SELECT buttons to daisy-chain GND connections on the DE-15 terminal block breakout.
Unfortunately, the USB-B panel mount cable is too long to be able to position the mount over top of the original hole that the control box had for the PS2/Xbox cables. So instead, I drilled new holes off to the side and filed the center hole down to size. I may eventually investigate ways to plug the open holes on the case, but overall, I'm really happy with how everything turned out!
The Arduino XInput Library really trivialized the programming required for this project, but I also incorporated the Bounce2 library to prevent buttons from double/triple/quadruple triggering. Buttons triggering multiple times wasn't a problem for normal gameplay, but it made navigating menus very annoying.
While I had hoped that the result of this project would be a plug and play experience on both Windows and Linux, I did end up having to do some extra configuration on Linux. The xpad kernel driver maps d-pad inputs to axes instead of discrete buttons, which can't be bound in StepMania and can't be used for jump steps that require pressing multiple directions at the same time. I ended up using xboxdrv instead of xpad, and have detailed the steps I took to install/configure xboxdrv in the RedOcteensy git repo README.
After playing for a bit, I feel like FSRs are an imminent upgrade. The force required to consistently activate buttons with the current contact sensors is too great to be able to reliably hit faster note sequences, and uses an exhausting amount of energy. The down arrow is particularly bad.
So, to be continued?