Firmware for the Widgetpad dance pad for rhythm games such as StepMania, Dance Dance Revolution, In The Groove, and Pump It Up.
Additionally, it should work for any FSR-based pad such as Bandit's Build This Travel Pad (BTTP), Teejusb's teejusb-pad, or my upcoming budgetpad, conceptually similar to an FSR-modded LTEK.
The firmware was originally based on Bandit's bttp-firmware under the "treat my code as whatever you want lmao" license, but has since been rewritten.
The firmware is designed hand-in-hand with an upcoming PCB breakout board for the Teensy 4.0 and 4.1 to easily connect all the sensors, LEDs, and external buttons needed.
Licensed under the GNU GPL version 2.
See LICENSE for full terms.
This firmware is for the Teensy 4.0 or Teensy 4.1
The firmware is built with PlatformIO. One of the following is required:
- VS Code with the PlatformIO extension (recommeded)
- CLion with the PlatformIO plugin
- Any other IDE with an appropriate PlatformIO plugin
- Gamepad button HID input
- Arbitrary amount of panels
- Runtime-modifiable sensor thresholds over serial
- Input smoothing
- Buzzer/speaker feedback
- Multiple sensors per panel
- 1000Hz polling rate
-
Saving configuration to onboard EEPROM - External button support (for arcade navigation buttons)
- Convert "Arduino C" to C++
- Use JSON data over Serial instead of "delicate" byte sequences
- Runtime-configurable panel and sensor setup
- Write a GUI configuration tool for the runtime settings of the pad
- Re-do EEPROM saving to use littlefs for arbitrarily-long config files
- Replace serial with HID (with a HID event to toggle serial for sending configurations)
- Support for LED status indicators (per sensor? per panel?)
- Pro Micro support (may require raw HID)
- LED support for external buttons
- Basic LED support for panels
- Onboard controls for LED brightness
- Extensible LED "programs" for various effects
- Piezoelectric/vibration motor tactile feedback
- Research what an on-device screen UI could look like
- Add multiple profile support
If you need help, please raise an
issue. You can also get
in touch with me on Discord on the Stamina Nation
server, or feel free to message me directly on Discord at Widget#0817
.
A pad
is a whole device, for one player.
It consists of (usually) four, five, or nine panels
, each of which maps to an arrow in most dance rhythm games.
Each panel
will have one or more sensors
to decide whether they are
pressed
once a threshold
is crossed. The panel
will remain pressed
until
the threshold
minus the threshold gap
is crossed the other direction.
Additionally, buttons
may be connected, such as the left/right/start/select
setup found on In The Groove cabinets.
This project was originally written in C but is shifting to C++ and attempting
to follow clang-tidy
's modernize-*
linter suggestions when possible.
Architecture, code structure, and best practices help from more experienced C++17 developers would be greatly appreciated.
Pull requests are of course appreciated but general instruction would also help tremendously.