Devlog #5 - Settings & Profile Storage
## Unknown - 5th September 2026
### Version: v0.4.0-settinger
Hello again!
Yeah… I kinda forgot the journal existed again XD
A LOT has changed since the last devlog, especially internally. The project is starting to feel less like a giant prototype held together by hopes and prayers and more like an actual tool.
### Main events
- Finally started working properly on the Settings menu!
- Added persistent settings using the ESP32’s Preferences storage
- Basically all the important environment variables are now stored, including:
- - Servo / joystick pins
- - Axis inversion and swapping
- - Speed settings and multipliers
- - Calibration parameters
- - Joystick deadzones and offsets
- - Debug mode
- - Display and scrolling settings
- - Calibration list information
- - Various delays and timing values
- Added saveSettings() and loadSettings() functions so I don’t have to hardcode everything every single time the board boots
- Settings also have default values, so if there is no saved value yet, the program still has a working configuration
- Started separating the stored data into different Preferences namespaces, so Settings and Servo Profiles don’t all get thrown into one giant storage section
- Calibration Lists got actual persistent storage, meaning the calibration data doesn’t disappear every time the ESP32 restarts
- Added more profile-related error handling
- Continued expanding the 3-digit error code system, which is starting to look suspiciously like I accidentally created my own mini error protocol XD
- Did a LOT more bug hunting and general code cleanup
- Also spent way too much time making tiny UI things work properly because apparently I have decided that a 128x64 OLED deserves the same amount of attention as a full desktop application :I
### Some of the more important stuff
The biggest thing here is probably the storage system.
Before, most of the variables were basically just sitting in the code waiting for me to change them manually.
Now I can save them to the ESP32 and load them again later.
For example:
settings.putDouble("speedMultiplier", speedMultiplier);
and later:
speedMultiplier = settings.getDouble("speedMultiplier", 1);
So if I change a setting, restart the board, and come back later, it stays changed.
This also means I finally don’t have to keep scrolling to the top of a 1500+ line sketch every time I want to change something XD
### What’s next?
- [ ] Actually TEST the full calibration workflow with a real servo
- [ ] Add an X-axis animation to the Settings menu when changing variables
- [ ] Add a way to name calibration list slots
- [ ] Make the amount of list slots dynamically generated instead of hardcoded
- - [ ] Add an “Add New Slot” option
- [ ] Add an on-screen keyboard or find a decent library for one
- [ ] Add a way to connect to the ESP32-S3’s second USB port and extract saved servo profiles as files
- [ ] Keep murdering bugs until the project stops finding new ones
### Notes
I’m starting to realize that the actual servo movement part was probably the easy bit.
The annoying part is everything around it.
Menus, storage, scrolling, profile management, error handling, input validation…
At least it makes the project way more interesting :D