Skip to content

widget-/widgetpad-firmware

Repository files navigation

Widgetpad firmware

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.

License

Licensed under the GNU GPL version 2.

See LICENSE for full terms.

Requirements

This firmware is for the Teensy 4.0 or Teensy 4.1

The firmware is built with PlatformIO. One of the following is required:

Features

Done

  • 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

To do

  • 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

Additional information

Help and contact

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.

Nomenclature

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.

Development

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.

About

Firmware for Teensy 4.0 for widget-/widgetpad

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published