# BROSE9323 driver An `Adafruit_GFX` driver for Brose flipdot panels, shared by both firmware targets. The constructor is `BROSE9323(width, height, panel_width, flip_time_us = 280)`. This project uses `BROSE9323 display(84, 19, 28)`. ## Build modes | Flag | Used by | Behaviour | |------|---------|-----------| | *(none)* | Nano | Drives the panel through GPIO. Keeps an old and a new frame buffer and flips only the dots that changed. | | `-D ESPSERIAL` | ESP32 | Holds no buffer. `drawPixel`, `fillScreen`, `display` and `setTiming` are sent as serial commands to the Stream passed to `begin(&Serial)`. | | `-D FLIPDOT_PLCC_ADAPTER` | Nano (optional) | Uses the pin mapping of the PLCC adapter board. | The flags are set per environment in `platformio.ini` through `build_flags`. Don't `#define` them in the header. ## Notes - In direct mode (`setDirect(true)`) every pixel is flipped right away, without a call to `display()`. - `setGap(us)` adds a pause after each flip pulse, `setPulses(n)` pulses each changed dot `n` times. Full redraws (`display(true)`, the first `display()` after boot) pulse the dots that look unchanged only once. - `setEffect(effect, ms)`: how `display()` shows a frame (`RefreshEffect` in `dot_sequence.h`). Anything but `EFFECT_INSTANT` runs in steps from `update()`, which must be called often; `busy()` says whether an effect is running. `display(true)` is always instant. On the ESP32 these calls become the `G`, `N` and `E` commands. - `print()` maps German umlauts (ÄäÖöÜüß) to the code page 437 glyphs used by the GFX font. - On an ATmega168 the old buffer is left out to save RAM. Every `display()` call then flips all dots.