* Command definition now uses char * instead of String * registered_commands is now an array of pointers to Commands, previously this was an array of Command and was allocated to MAX_COMMANDS entries which were then overwritten with the module provided Commands, so every Command used twice as much memory. This saves ~200bytes * Several (u)ints are now (u)int8_t On the nano with all modules included this reduces global RAM use from 1676 bytes to 1237 bytes (from 81.8% to 60.4%). |
||
|---|---|---|
| .vscode | ||
| include | ||
| lib | ||
| src | ||
| test | ||
| .gitignore | ||
| platformio.ini | ||
| README.md | ||
Firmware for the Sangaboard and similar motor controllers
This firmware is a Work in Progress, do NOT use for production builds
Many features of this firmware are untested and it changes behaviour of the pysangaboard module, breaking fast autofocus in OFM software (see #1, !1). If you want a reliable device use the original firmware.
If you like living on the edge and decide to use this firmware, please report any issues you run into to this repo.
About
Firmware for the control board of OpenFlexure Microscope. This is a refactor of the original arduino code with some improvements to the infrastructure and features.
Notable changes
This version of the firmware uses PlatformIO rather than Arduino IDE.
The code is split into the main part which mostly handles command parsing and modules which execute actual commands, allowing the firmware to be easily extensible with new features (add a module based on one of the existing ones and add a line to setup to register its commands and loop function).
Motor moves now do not block command processing and a new command stop was added which aborts any move in progress.
Hardware
This is mainly intended for Sangaboard control boards and all configuration for these is already in boards.h, but it can also be used on different platforms (pi pico, stm32 (bluepill)). To use a custom board based on any of these platforms adjust boards.h to match your wiring.
If you have additional hardware connected to the board (Endstops, Light sensor) support for these can be enabled in config.h.
Building and uploading
The easiest way to build and upload this firmware is to install pio core via pip. For arduino nano with sangaboard v0.2 run
pip3 install platformio
pio lib install
pio run -e nano
pio run -e nano -t upload
for sangaboard v0.3 replace nano with leonardo in the above commands (untested).
TODO list
Original firmware feature parity
- Implement Endstops module
- Implement Light sensor modules
- Handle Sangaboardv3
Testing
- Ensure responses to commands match the original version
- Test endstop modules
- Test Light sensor module
- Test on different platforms
Improvements and fixes
- Add a CI script
- Add test for argument parsing
- Add more unit tests
- Test automatic building and upload
- Support other platforms
- Clean up
- Improve handling of unused modules/libraries
- Lower RAM use