Introduction: Modifying an L-tek Dance Pad to Poll at 1000hz on Windows and Linux
Why do this mod?
If you've ever scrolled over to the graph on a 125 BPM song, you might wonder, what's up with this spikey boi? Why is the timing falling into discrete "slots"?
ITG and DDR have incredibly tight timing windows, and with this 8ms/125Hz sampling rate, we're going to get Excellents that should have been Fantastics, and Greats that should have been Excellents. This game is already hard enough, if you wanted a pad to hold you back you would have bought a soft pad!
How do we fix this?
The ltek pad cannot poll at 1000hz on it's own. The way USB 3.0 is implement forces polling decisions on the hardware level. Even modifying the polling rate in the linux kernel a-la "usbhid.jspoll=" will not affect the Ltek.
There is no custom drivers or firmware that enables it, and there may never be. So, we need to replace the hardware.
Supplies
Skills Required:
- Amateur soldering experience (this was my 5th time soldering)
- 4-6 hours
Tools:
- A computer
- Soldering iron
- Soldering iron tip cleaner
- Wire strippers
- Phillips and Flathead Screwdriver
- Heat Gun or Lighter
Parts:
- Arduino Micro*
- Spare wire
- Heat shrink tubing
- Solder
- Flux
- Electrical Tape
- Silicone sealant (electronics safe)
- A micro USB cable (any length, it will be sacrificed. Use the one you upload your Arduino sketch with)
* Arduino Micro: Can be substituted for any clone, but must be a Leonardo**-compatible micro (not the mini or nano).
** The standard Leonardo will not fit inside an L-tek. It would require 3D-printed control box, and wiring a custom adapter. That control box could include a start+sel switch or even hook up to a panel for music/option select. If you want to expand for that in the future please DM me (contact info at bottom), I'll add it in!
Step 1: Install the Arduino IDE
Download the Arduino IDE from https://www.arduino.cc/en/Main/Software.
If you're using Windows, follow the below steps.
If you're using Linux, the guide at https://www.instructables.com/id/Install-Arduino-... may be helpful.
(Windows)
Leave "Install USB Driver" checked. The rest may be unchecked if you please.
(Windows)
Click "Install" through the prompts
(All)
Download my Arduino code at https://github.com/StarlightLumi/DanceCtl
Follow the instructions on that page, then continue below.
Step 2: Upload the Sketch to Your Arduino Micro
- Open it, click "OK"
- Plug your Arduino Micro into your PC. Select your board as "Arduino Micro".
- Select the board under "ports". My Micro identified as a Leonardo, but that's OK, the code still works!
- Then press CTRL+U on your keyboard to compile and upload. Once the upload is successful, you may unplug your Arduino.
Step 3: Solder Wires to the Arduino
First time soldering? Watch this video!
Soldering:
- Gather some thin wires, about 3-4in long.
- Using a toothpick, dab a bit of flux onto pin 4
- Poke the colored wires through the 4-hole
- Drop the solder onto the 4-hole until it covers all around the wire. I soldered from the bottom.
- Repeat steps 2-5, in exact order for the other pins, and ground wire.
My code uses pins 4-9. Since I fucked up the solder on pin 6, my pad will use pins 5,7,8,9 for the 4 panels. If you don't have pins 4-9 available, change 4,5,6,7,8, and 9 in this line of code to reflect the pins you actually soldered to, and re-upload the sketch. Even if you only use 4 of the pins, make sure to list 6 of them or the program will break.
> static const int buttonPins[NBUTTONS] = {4,5,6,7,8,9};
Make sure to solder a ground connection!
Step 4: Gather Your Tools and Open the Ltek
Next, gather your tools and Ltek.
Remove the plastic and paperboard covering on the panel adjacent to the USB port. I ordered mine during the pandemic, so there was a big demand. They cheaped out on the USB wires and the ground bar slot is empty. We'll just roll with their methods.
Step 5: Snip the Wires and Pry the Old Board Out
Using the Scissors, snip the 4 USB wires as close to the board as possible. Every millimeter you can save will make the next steps easier.
GENTLY pry the PCB* out with a flathead screwdriver on the top edge, as shown in picture 3.
note: save this board somewhere.
* If it ended up breaking, be VERY careful with the next steps, there's no going back.
Lift up the board and snip the black wires as close to the board as possible. Notice the 4 ground wires all soldered together? They have a red stripe on them.
Step 6: Solder the Wires
Solder the 4 solid black wires to the 4 wires you soldered to the Arduino earlier.
I'm not a professional, but here's my steps:
- Put heat shrink on both ends (or at least one end)
- Twist wires together in a Y
- Dip the bare wire in flux
- Drop solder onto it
- Using a lighter, burn the heat shrink tubing
- Wire them in any order, we can fix the keybinding in Stepmania later.
For the ground wires,
- Put a big heat shrink on the ground wire coming from your arduino
- Twist all 5 of them together
- Dip the bare wire in flux
- Drop solder onto it
- Using a lighter, burn the heat shrink tubing
A true professional would have at least used an "I" joint instead of my "Y" joint, and a heat gun instead of a lighter.
Step 7: Solder the USB
Next you'll need to cut your USB cable. Leave at least 6 inches of slack.
Strip the big black outer core, and then strip the 4 colored wires. If you have a continuity tester, test the continuity of the 4 USB pins to the cables. If you don't, the second photo shows how mines wired.
Repeat the previous soldering process for all 4 pins.
Step 8: Test and Seal
Next, connect the USB cable to your Stepmania machine to test it. You should see some lights blink on.
Go into Stepmania, and configure the inputs. If all 4 configure successfully, great! Continue on.
Troubleshooting:
- If the lights don't come on, check the USB port and plug. One of the power lines isn't working
- If your PC fails to recognize the Arduino, check the USB data lines.
- If one of your buttons isn't detected, check the arduino, wire, and joint
- If none of your buttons are detected, check the system to make sure it's detecting a controller at all.
- In windows, open "Set up USB Game Controllers" from the Control Panel.
- If it is listed there, then check your ground connections
- If it's not listed, repeat step 2, and google any errors you encounter. (They will appear in orange in the bottom output prompt)
- If your sketch fails to upload, it's likely due to a bad USB cable, I had a 1/12 success rate with my spare cables.
If one of your buttons is stuck ON, try loosening the screws a quarter turn.
If you are still having problems, check the previous comments before posting your own.
Once you've verified everything's working, it's time to seal everything. Put silicone down on all your Arduino wire joints. This thing will be vibrating hard when you play, so you want to give those solder joints every chance at a long life.
Put electrical tape on top to keep everything in the slot. I added 6 more pieces after this photo to keep all the wires secure.
Time to put the panels back on. Be gentle screwing into wood! Do not overtighten, and do not screw at an angle. If you encounter too much resistance before the screw is flush, back up and try again.
Step 9: Can I Call You a Dancin' Masta?
Isn't that L-tek board so big? Would that solder pad to the right be used for? It's mesmerizing to me that we can do better with an Arduino.
If you have any questions or comments, feel free to reach out to me at @LumiAFK on twitter.
That's it! Can I call you a dancing masta?
Credits:
Martin Natano (for the original guide)
https://www.natano.net/blog/2019-12-14-usb-polling...
Matthew Heironimus (for Arduino Joystick Library)
https://github.com/MHeironimus/ArduinoJoystickLibr...
Arduino.cc (for the Arduino Micro design, and for making everything open source)