Initial commit — Amirine Cosplay Lights
Arduino Uno + WS2812B LED strip controller with a text-based lightshow system. Shows are defined as .txt files (hex color + fade duration per step), converted to PROGMEM headers by convert_all.py, and navigated at runtime via a debounced button (tap/double-tap/hold). BSD 2-Clause license. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# Project Plan — Amirine Cosplay Lights
|
||||
|
||||
This file records the original design brief and decisions so future contributors can understand why things are built the way they are.
|
||||
|
||||
---
|
||||
|
||||
## Goals
|
||||
|
||||
1. **Light show player** — load `.txt` files that define a sequence of colors with transition durations. Steps fade from the previous color to the next over the specified time. Setting duration to `0ms` gives an instant switch; high values (e.g. `5000ms`) give a slow fade.
|
||||
|
||||
2. **Multi-show navigation** — all shows are compiled into the firmware. A single button lets you cycle through them:
|
||||
- 1 tap — next show
|
||||
- 2 taps — previous show
|
||||
- Hold — reset to show 0 (slow blue pulse)
|
||||
|
||||
3. **Arduino + WS2812B** — runs on an Arduino Uno with a WS2812B (NeoPixel) LED strip.
|
||||
|
||||
4. **Open source** — BSD 2-Clause license. Free for any use, personal or commercial.
|
||||
|
||||
5. **Designed for expansion** — the LED controller layer (`led_controller.h/.cpp`) is structured so that new patterns (chase, sparkle, gradient) can be added later without touching show playback logic.
|
||||
|
||||
---
|
||||
|
||||
## Hardware confirmed
|
||||
|
||||
- **Board:** Arduino Uno
|
||||
- **LED strip:** WS2812B (NeoPixel), data pin 6, ~60 LEDs, GRB color order
|
||||
- **Button:** momentary push button on pin 2, wired to GND (INPUT_PULLUP)
|
||||
- **Color format:** hex codes (`#RRGGBB`)
|
||||
- **Show loading:** compiled into firmware via Arduino IDE / arduino-cli
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
```
|
||||
Write/edit .txt files in converter/shows/
|
||||
↓
|
||||
make upload
|
||||
(runs make shows → make build → arduino-cli upload)
|
||||
↓
|
||||
Show starts immediately, button navigates
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Design principles
|
||||
|
||||
- **Small, clearly named functions** — each function does one thing.
|
||||
- **Comments explain the why** — not the what.
|
||||
- **PROGMEM for all show data** — Arduino Uno has only 2KB RAM; all `Step` arrays and the `SHOWS[]` index live in flash.
|
||||
- **Single config file** — all hardware values are in `config.h`; porting to a different board or strip type requires edits in one place.
|
||||
- **generate-don't-maintain** — `shows.h` and `show_*.h` are generated files; the source of truth is the `.txt` files in `converter/shows/`.
|
||||
|
||||
---
|
||||
|
||||
## Future ideas (not yet implemented)
|
||||
|
||||
- Per-LED patterns (chase, sparkle, gradient segments)
|
||||
- Multiple strip support
|
||||
- Battery power optimization (auto-dim, sleep)
|
||||
- SD card loading (no recompile needed for new shows)
|
||||
- WiFi loading via ESP32 (browser-based show upload)
|
||||
- Multiple buttons for direct show selection
|
||||
- Show name displayed on a small OLED
|
||||
Reference in New Issue
Block a user