A simple DDR controller implementation for Arduino devices using modern C++
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffy 9ce46b0b36 Update docs 3 weeks ago
DDRuino.ino Improve debounce 3 weeks ago
LICENSE Initial commit 1 month ago
README.md Update docs 3 weeks ago



A simple dance pad controller implementation for Arduino devices

(c)2021 j “fluffy” shagam, fluffy@beesbuzz.biz


I was pretty dissatisfied with the code quality of all of the Arduino-based dance pad (DDR/Stepmania/etc.) controller sketches I could find, so I decided to write my own using more-modern C++ with an easier means of configuring things.

This only needs Arduino’s default keyboard library, and is intended to let you customize the mapping on a per-pin basis. It requires an Arduino with built-in USB HID support (such as a Leonardo, a LilyPad USB, etc.) and a dance pad that uses contact sensors. I use it with an ATmega 32U4 that I bought off Aliexpress and installed into an L-Tek. See this tutorial for a pretty good explanation of how to perform the L-Tek mod yourself.


Modify the mapping array to include all of your active pins and their respective buttons. The mapping provided is just how my pad happens to be wired up; yours will probably vary.

If you have two pads in a doubles set, you’ll want to set the pads’ arrow buttons to be different keys (for example, wasd for the left pad and ijkl for the right pad).

If you’re not sure how your pins are connected, you can uncomment the #define DEBUG line and then run the sketch with the serial monitor enabled, and it’ll give you a continuous display of which pins are currently active. Just remember to disable debug mode (i.e. comment the #define back out) before you start using the pad for actual gameplay; leaving it enabled will vastly lower your input sampling rate.

Debouncing is on a per-switch basis so it shouldn’t be necessary to make it shorter than 20ms (which allows a peak of 25 steps per second on a single switch) but it’s probably safe to reduce it further. The minimum safe debounce time will depend a lot on your individual pad. This particular (simple) debounce implementation will never add latency to an initial step.