|
AwesomeStudioPedal
A programmable, multi-profile foot controller for DAWs, score readers, and studio automation
|
GPIO pin assignments and build counts (number of profiles, select LEDs, and action buttons) are set in builder_config.h, one file per hardware target:
Open the file for your board, change the CONF_* values to match your wiring, and rebuild. The file contains plain-English static_assert checks — if your configuration is invalid, the build fails with a descriptive message telling you exactly what to fix.
For the default wiring table, see BUILD_GUIDE.md.
Button mappings are stored in data/profiles.json. The file is deployed to the device's LittleFS filesystem during upload.
Buttons are identified by letter (A, B, C, … Z). The number of button entries per profile should match the number of action buttons wired (CONF_NUM_BUTTONS in builder_config.h). The default build uses 4 buttons (A–D); the firmware supports up to 26 (A–Z).
| Type | Description | Required fields |
|---|---|---|
SendStringAction | Types a text string | value |
SendCharAction | Sends a single key | value (key name) |
SendKeyAction | Sends a USB HID key code | value (key name) |
SendMediaKeyAction | Sends a media key | value (media key name) |
SerialOutputAction | Writes to serial monitor | value |
DelayedAction | Waits, then executes another action | delayMs, action |
For the full list of valid value strings per action type, see KEY_REFERENCE.md.
DelayedAction runs another action after a delay. The delayMs field sets how long to wait in milliseconds. While the countdown runs, the power LED blinks.
Example — the camera remote delayed shutter:
Press the button, set down the controller, and the action fires 3 seconds later.
The firmware picks an encoding mode at runtime based on how many profiles and select LEDs you have wired:
One-hot mode (numProfiles ≤ numSelectLeds): one LED lights exclusively for each profile. Profile 1 → LED 1, Profile 2 → LED 2, etc. Easiest to read at a glance.
Binary mode (numProfiles > numSelectLeds): the 1-based profile number is encoded in binary across all select LEDs. LED 1 = bit 0 (LSB), LED 2 = bit 1, etc.
The maximum number of profiles your wiring can represent is 2^numSelectLeds − 1:
| Select LEDs wired | Max profiles |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 7 |
| 4 | 15 |
| 5 | 31 |
| 6 | 63 |
If you set CONF_NUM_PROFILES higher than this ceiling, the build will fail with an error message.
data/profiles.json.If you only changed the config file (no firmware changes): run a filesystem-only upload:
If you also changed firmware: run the full upload:
If the JSON file is missing or invalid on startup, all LEDs blink 5 times and the factory default configuration loads. Factory defaults are hardcoded in lib/PedalLogic/src/pedal_config.cpp.
| Target | Board | Status |
|---|---|---|
| ESP32 | NodeMCU-32S | Deployed and tested |
| nRF52840 | Adafruit Feather nRF52840 | Implemented, not tested — use at own risk |