Digispark / ATtiny85 multi-mode LED strip controller with rotary encoder switch control
A high performance, efficient, menu driven, addressable LED controller that uses the dirt cheap Digispark board (available for $1.50 shipped on eBay). The menu system is based on input from a rotary encoder with a switch. One remaining pin can be used to wake/sleep the unit, which is useful for things like cabinet lighting. With low quiescent current requirements, this controller is usable in battery driven applications like Camper Vans.
- APA102C/SK9822 LED strip control via SPI bus
- HSV interface and effects via FastLED library
- Interrupt driven, queued event driven handling of rotary incremental encoder + switch control
- Logarithmic dampened linear encoder acceleration algorithm for smooth and quick rotary input
- Supports at least 144 LED (high density 1m) strips in all modes
- Multi-mode - switchable and tunable solid, rainbow, breathing effects
- Holding the switch while running will save the current mode as startup mode, and the current mode settings to EEPROM
- Holding the switch on boot enters setup mode, used to change the LED strip length
- Holding the switch on boot for a real long time resets the EEPROM
- (TODO) Optional external switch mode to use with cabinet switch input
- (TODO) Include micronucleus image for instant boot with V-USB mode on grounded pin
- PB0 -> APA102 clock
- PB1 -> APA102 data
- PB2 -> Encoder CLK (to ground)
- PB3 -> Encoder DT (follows CLK by 90 degrees) (to ground)
- PB4 -> Encoder Switch (to ground)
- PB5 -> (Optional, to ground) external switch for instant wake/sleep
Description of UI modes & controls
| Type | Threshold | Description |
|---|---|---|
| Short Press | 0ms | Typical operations, menu navigation, confirmation |
| Long Press | 750ms | Power off, escape to previous menu |
| Super Long Press | 2000ms | "Destructive" operations, save mode & settings to EEPROM; enter setup... |
| Mega Long Press | 5000ms | "Mega Destructive" operation; reset EEPROM |
| Mode | Control | Action |
|---|---|---|
| Off | Short Press | On |
| Super Long Press | Setup Menu | |
| Mega Long Press | Reset EEPROM | |
| Setup | Rotate | Set strip length |
| Super Long Press | Save setting & restart | |
| On | Rotate | adjust current setting |
| Short Press | next setting | |
| Double Short Press | next mode | |
| Long Press | Off | |
| Super Long Press | Save current settings as default |
| Effect | Submenu | Control | Action |
|---|---|---|---|
| Solid | Rotate | Adjust brightness | |
| Short Press | Enter submenu 1 | ||
| submenu 1 | Rotate | Adjust Hue | |
| submenu 1 | Short Press | Enter submenu 2 | |
| submenu 1 | Long Press | Main | |
| submenu 1 | Timeout | Main | |
| submenu 2 | Rotate | Adjust Saturation | |
| submenu 2 | Short Press | Main | |
| submenu 2 | Long Press | Main | |
| submenu 1 | Timeout | Main | |
| Wheel | Rotate | Adjust brightness | |
| Short Press | Enter submenu 1 | ||
| submenu 1 | Rotate | Adjust Speed | |
| submenu 1 | Long Press | Main | |
| submenu 1 | Timeout | Main |