Public Access
Add HA dropdowns, off image, flip fixes and refresh effects
Home Assistant: remove the Clock switch (its entity is deleted on connect), add an IP sensor and Mode / Off image dropdowns whose options follow the saved bitmaps. Remove the built-in "Nintendo border" bitmap. Off image: a bitmap (or blank) left on the dots when the display switches off. Nano: pause after each flip pulse and repeat pulses for changed dots, both stored in EEPROM (G/N commands). Refresh effects (E command): instant, sparkle, wipe, rain, from the middle out, diagonal, spiral, flip all then reveal, push and random, optionally only for small changes. Effects run in steps from loop() so serial input keeps flowing. Web UI: flip settings, refresh effect and test patterns under Settings; the System tab shows why the ESP32 last restarted. Settings records from versions 1 and 2 are migrated. Firmware 2.3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4a5f6a8b5d
commit
1d3b084de1
42 files changed
+1631
-230
No files matched your search
+24
-6
@@ -27,19 +27,34 @@ Arduino core, EEPROM and the display driver are replaced by fakes in
|
||||
|
||||
## Behaviour
|
||||
|
||||
- **Boot:** the Nano loads the flip time from EEPROM, sets up the pins and sends `READY`.
|
||||
- **Boot:** the Nano loads the flip settings from EEPROM, sets up the pins and sends `READY`.
|
||||
It doesn't flip any dots at boot. The relay powers the Nano, so it boots every time the
|
||||
display is switched on.
|
||||
- **First `display()` after boot** redraws every dot, because the Nano doesn't know which
|
||||
state the dots were left in.
|
||||
- **`display()`:** compares the new buffer with the last one that was shown and strobes
|
||||
only the dots that changed.
|
||||
only the dots that changed, each with `N` pulses (default 2: the second one catches
|
||||
dots that missed the first). Every pulse is followed by a pause (`G`, default 200 µs)
|
||||
so the coil supply can recover.
|
||||
- **Refresh effect** (`E`): with `0` (default) a frame appears column by column as fast
|
||||
as possible. The other effects (sparkle, wipe, rain, from the middle out, diagonal,
|
||||
spiral, flip all then reveal, push, random) spread the flips over the effect time.
|
||||
Push shifts the whole picture one column per step, so it flips many dots and can take
|
||||
longer than the effect time. With flag 1 only small changes (at most 1/10 of the dots,
|
||||
like the clock's minutes) get the effect. After boot the dot state is unknown, so push
|
||||
falls back to a wipe. They run in small steps from `loop()`, so serial data keeps
|
||||
being read; while a new frame is being drawn into the buffer the effect pauses, and the
|
||||
next `D` starts it again. The orders come from `DotSequence` in
|
||||
[lib/BROSE9323/dot_sequence.h](../../lib/BROSE9323/dot_sequence.h).
|
||||
- **Every 2 minutes** (`REFRESH_TIME`) it does a full redraw to fix dots that got stuck.
|
||||
A full redraw blocks for about half a second, which is long enough to overflow the
|
||||
64-byte serial buffer. So it only runs right after a `D` (the end of a frame, when the
|
||||
ESP is quiet) or when no serial data has arrived for 2 seconds.
|
||||
ESP is quiet) or when no serial data has arrived for 2 seconds, and never while an
|
||||
effect runs. It is always instant, with one pulse per dot.
|
||||
- **Flip pulse length** (µs, 50–2000) is set with the `T` command and stored in EEPROM,
|
||||
so it is kept after a reboot. The default is 200 µs.
|
||||
so it is kept after a reboot. The default is 200 µs. `G`, `N` and `E` are stored the
|
||||
same way (addresses in `settings.cpp`; values that were never written fall back to the
|
||||
defaults in `config.h`).
|
||||
|
||||
### Debug options
|
||||
|
||||
@@ -55,8 +70,8 @@ Uncomment these in `config.h`:
|
||||
Each command is one ASCII line that **ends with `\n`** (`\r` is ignored). The Nano
|
||||
collects a whole line before it runs the command. If a line is broken or unknown, it is
|
||||
skipped and the next line starts clean. Coordinates are 2-digit **hex**. Color is `0`
|
||||
(black) or `1` (yellow). The ESP32 driver (`ESPSERIAL`) only uses `s`, `S`, `F`, `D` and
|
||||
`T`.
|
||||
(black) or `1` (yellow). The ESP32 driver (`ESPSERIAL`) only uses `s`, `S`, `F`, `D`, `T`,
|
||||
`G`, `N` and `E`.
|
||||
|
||||
| Cmd | Format | Meaning |
|
||||
|-----|--------|---------|
|
||||
@@ -68,6 +83,9 @@ skipped and the next line starts clean. Coordinates are 2-digit **hex**. Color i
|
||||
| `B` | `BXXYYWWHHcHEX...` | Draw a bitmap. WW must be a multiple of 4. Pixel data is one hex digit per 4 pixels, row by row. The data is drawn while it arrives, so it is not limited to 64 characters. |
|
||||
| `R` | `R` | Print the buffer as ASCII art on the serial port |
|
||||
| `T` | `Tnnn` | Set the flip pulse length in µs (decimal, 50–2000), stored in EEPROM |
|
||||
| `G` | `Gnnn` | Pause after each pulse in µs (decimal, 0–5000), stored in EEPROM |
|
||||
| `N` | `Nn` | Pulses for each changed dot (1–3), stored in EEPROM |
|
||||
| `E` | `Ee,nnnn[,f]` | Refresh effect `e` (0 instant, 1 sparkle, 2 wipe, 3 rain, 4 from the middle out, 5 diagonal, 6 spiral, 7 flip all then reveal, 8 push, 9 random), its time in ms (100–10000) and flags `f` (1 = only small changes, default 0), stored in EEPROM |
|
||||
|
||||
Replies on the Nano's TX pin:
|
||||
|
||||
|
||||
Reference in new issue
Block a user