Overview
DOTS is a compact, 6-channel Eurorack module designed for generating triggers and gates. This open hardware project allows you to build the module yourself, with instructions and resources provided. Please visit the website for more info.
Features
Watch a quick demo video here.
- 6-Channel Trigger/Gate: Generate triggers and gates for your modular system.
- Compact Size: Only 6hp wide, making it a handy addition to your setup.
- Sync Capabilities: Includes a clock and reset input, allowing it to function as a master or slave.
- Visual Feedback: Equipped with a screen and an UI.
- Multiple Programs: The firmware features multiple programs for different trigger/gate patterns and functionalities.
Instructions
Check the website for detailed instructions on how to order, build and flash the module.
Resources
Technical Specifications
- Width: 6HP
- Depth: ~30mm
- Clock Input: 0-5V triggers/gates
- Reset Input: 0-5V triggers/gates
- Outputs: 6x 0-5V triggers/gates
- Display: 128x64 OLED
- Microcontroller: ATmega328P
- Memory: EEPROM storage for patterns and settings
Modes
- Step Sequencer: Classic 16-step pattern programming with 8 pattern banks and visual step editing
- Euclidean Sequencer: Generate complex polyrhythmic patterns using Euclidean algorithms with individual channel control
- Clock Divider: Individual channel dividers (÷1 to ÷16) for creating polyrhythmic sequences and musical divisions
- Random Trigger: Probability-based trigger generation with adjustable chance per channel
- Configuration Menu: Comprehensive settings for BPM, clock modes, output types, and more
Development
Building from Source
- Prerequisites: Install PlatformIO and Git
- Clone:
git clone https://github.com/johannesstrueber/dots.git
- Build:
platformio run
- Flash: Use
./flash_module.sh for automated flashing with default patterns
Editing EEPROM Configuration
code/src/eeprom_config.cpp contains default settings and pattern configurations. It's a standalone, self-contained file (built as its own PlatformIO environment) — modify it directly to customize the initial state of your module.
Commit Conventions
Commit messages follow Conventional Commits (e.g. fix: correct rotation clamp). Running npm install once sets up a Husky pre-push hook that lints commit messages with commitlint before they leave your machine.
Continuous Integration
GitHub Actions builds every PlatformIO environment (program_via_AVRISPmkII, program_via_USBasp, eeprom_config_AVRISPmkII, eeprom_config_USBasp) on every push and pull request, and lints PR commit messages as a server-side backstop to the local Husky hook. Further improvements worth adding:
- A Wokwi CI smoke-test job — the repo already ships
diagram.json/wokwi.toml, but there's no scripted test scenario to assert against yet.
- A flash/RAM usage regression check from
pio run's size output, since this target already runs close to its 32KB flash limit.
- Tagging a GitHub Release with the built
.hex/.elf artifacts on version tags.
Repository Structure
- /code/include/modes: One header per UI mode (step sequencer, Euclidean sequencer, random trigger, clock divider, config menu, main menu, instructions)
- /code/include/utilities: Shared helpers (display drawing, encoder handling, bit/pattern math, trigger output, reset handling, startup/splash screens)
- /code/include/State.h: Shared enums and global state declarations used across modes
- /code/include/UiStrings.h: PROGMEM-stored UI text/labels
- /code/src/modes: Implementation of each mode header above
- /code/src/utilities: Implementation of the shared helpers above
- /code/src/main.cpp: Main firmware entry point (
setup()/loop())
- /code/src/eeprom_config.cpp: Default settings and pattern configuration, built as its own PlatformIO environment
- /kicad_frontpanel: Front panel PCB design files (KiCad)
- /kicad_main: Main PCB design files (KiCad)
- diagram.json: Hardware simulation (WOKWI)
- platformio.ini: Build configuration (PlatformIO)
- flash_module.sh: Automated flashing script with EEPROM configuration
Disclaimer
This is a personal project and not a commercial product. The creator is not liable for any damage caused by the module. Use at your own risk. The project is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

If you have any questions, feel free to contact the creator. This is a hobby project, and the creator is a web developer, not a professional hardware embedded systems builder; some hardware design or code decisions may seem unconventional.
Special thanks to HAGIWO for providing foundational knowledge.
Happy Building!