-
Notifications
You must be signed in to change notification settings - Fork 1
Flaps and Character Sets
What's printed on your reels is your choice — and the firmware adapts to it.
On Adam's original firmware the character set is fixed: the reel is what the firmware
expects, and that's that. The Universal Firmware (v31+) makes both
the flap count and the character set configurable per module and stores them in
the module's EEPROM. That's what lets you print a reel with É, Ö or Ñ on it — or a
reel with no punctuation at all — and have text land on the right flap.
This is one of the bigger differentiators of the Universal Firmware, and it's what makes the companion's localization actually show up on the wall rather than as blanks.
Each module stores two things you can change:
| Flap count |
1–64. It drives the step maths (index × totalSteps ÷ count), so it must match the real reel. |
| Character set | The ordered character at each flap index. Index 0 is always the blank / home flap. |
Send a character (m<ID>-É) and the module looks it up in its set and turns to that
flap. If the character isn't on the reel, the module homes — a visible, predictable
"I can't show that" rather than silence.
Setting it — easiest from the Gateway's Modules tab (ℹ Info → Flap
Set, on v31+ modules). Over the bus it's the N command, which works direct, by
broadcast (configure a whole wall in one shot) or by serial number:
m<ID>N<count>:<chars> one module
m*N<count>:<chars> every module on the bus
Both parts are independent — set the count, the characters, or both. They persist in
EEPROM and survive a reflash (as long as you wrote the EESAVE fuse; see
Module Firmware).
A reel holds at most 64 flaps, so a character set is a zero-sum choice. The fixed costs:
| Slot | Count |
|---|---|
| Blank / home flap (index 0) | 1 |
A–Z
|
26 |
0–9
|
10 |
Colour flaps r o y g b p w
|
7 |
| Subtotal | 44 |
| Left for punctuation + accents + currency | 20 |
So every accented letter you print costs you a punctuation mark or a colour flap.
Thirteen French accents (ÀÂÇÈÉÊËÎÏÔÙÛÜ) eat most of the budget on their own.
This is what a module ships with — no accents, a full punctuation run, all seven colours:
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$&()-+=;q:%'.,/?*roygbpw
(In printed listings a q in the punctuation run stands in for the double-quote flap.)
If you don't want accents, stop here — use the default set. Nothing else in the stack requires them. The companion will simply blank (or home) anything your reel can't show.
A starting point, not a prescription — what you print is 100% up to you. Each row below is exactly 64 unique flaps, all printable on a Windows-1252 wall, built as:
blank +
A–Z+ the locale's accents +0–9+ its currency symbol + as much punctuation as still fits + the seven colour flaps
| Locale | Language | Accents | 64-flap set (␣ = the blank / home flap, index 0) |
|---|---|---|---|
en-US |
English (US) | 0 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$!?.,'-:%&()@#+=/;*"roygbpw |
en-GB |
English (UK) | 0 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789£!?.,'-:%&()@#+=/;*"roygbpw |
fr-FR |
French | 13 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÇÈÉÊËÎÏÔÙÛÜ0123456789€!?.,'-roygbpw |
de-DE |
German | 4 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß0123456789€!?.,'-:%&()@#+=roygbpw |
es-ES |
Spanish | 7 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÑÓÚÜ0123456789€!?.,'-:%&()@roygbpw |
it-IT |
Italian | 6 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÀÈÉÌÒÙ0123456789€!?.,'-:%&()@#roygbpw |
pt-PT |
Portuguese | 12 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÇÉÊÍÓÔÕÚ0123456789€!?.,'-:roygbpw |
nl-NL |
Dutch | 7 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉËÍÓÚÜ0123456789€!?.,'-:%&()@roygbpw |
sv-SE |
Swedish | 3 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ0123456789€!?.,'-:%&()@#+=/roygbpw |
da-DK |
Danish | 3 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ0123456789€!?.,'-:%&()@#+=/roygbpw |
nb-NO |
Norwegian | 3 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ0123456789€!?.,'-:%&()@#+=/roygbpw |
fi-FI |
Finnish | 3 | ␣ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÅ0123456789€!?.,'-:%&()@#+=/roygbpw |
Trim or reorder freely: drop the colour flaps to buy four more accents, drop @ # % & if
you never show them, or print a 40-flap reel and set count to 40. The firmware only
needs the count and the set to match what you actually printed.
-
Companion localization picks the words (French app text,
9 juillet,1 234,50). Whether those words can be shown depends on your reels. Language and flaps are independent settings — set both. - Text is handled as Windows-1252, which is why the character sets above stay inside that code page.
A split-flap fails quietly. Send a module a character that is not printed on its reel and it does not complain and does not substitute — it homes. You get a blank cell in the middle of a word, and nothing anywhere reports it.
The gateway now tells the companion what it can show (GET /api/capabilities, asked on boot
and on every resync — it knows, because it is the thing that configures the modules). On a
mixed wall it reports the intersection: a character only half your modules carry is a
character that will punch holes in the other half.
So the companion no longer sends a character and hopes. What your reel cannot show becomes the nearest thing it can:
| the app sends | your reel has no… | you get |
|---|---|---|
Åre |
Å |
ARE — the accent goes, the word survives |
Dinner — 7pm |
em dash | DINNER - 7PM |
15:30 |
colon (the fr-FR reel has none) |
15.30 |
♥ |
pictograph flaps | a space, deliberately |
Straße |
ß |
STRASSE — two flaps, the documented German fallback |
ß is the interesting one. A reel that carries it carries only the lowercase form — there
is no uppercase ẞ flap — so an all-caps German page correctly shows STRAßE, and that is not
a bug. Only a reel with no ß at all falls back to SS, which costs a second module: the
substitution therefore happens while the text is still text, before it is centred, so the line
is wrapped knowing it got longer. (A single S is not a shorter spelling of SS; it is a
misspelling.)
And what your reel does have, it keeps: on the French reel above, Prévu goes out as
PRÉVU, accent and all. That is what those thirteen accent flaps are for.
A gateway too old to answer is left exactly as it was — the companion sends the character and the module does what it does.
An app writes its words the way a person writes them — Partly cloudy, not PARTLY CLOUDY.
The companion folds them to capitals on the way out, and only for a wall that has no
lowercase flaps. So the same app feeds both kinds of display:
| the app produces | a split-flap shows | a Matrix Portal shows |
|---|---|---|
It's five past three |
IT'S FIVE PAST THREE |
It's five past three |
If you own a physical wall, nothing about this is visible to you — the output is byte-for-byte what it always was. If you'd rather a Matrix Portal shouted anyway (it is, after all, what a split-flap looks like), turn on Always uppercase in the companion's global settings, per display.
A Matrix Portal Gateway has no printed flaps at all — its virtual reels carry 237 of them, so on top of the full Windows-1252 set it has the 60 lowercase letters and 14 pictographs:
♥ heart |
♦ diamond |
♣ club |
♠ spade |
☀ sun |
☺ smiley |
♪ note |
● dot |
■ block |
⌂ house |
← ↑ → ↓
|
the four arrows |
Apps use them only when the wall has them. Ask the display what it can do (see
Writing Apps)
and fall back when it can't: the arrows degrade to < ^ > v, which still read; a heart has no
honest substitute, so an app that wants one has to check first.
The seven colours work on both, but differently. On a physical wall a colour is spelled
with a letter — r is the red flap, which is exactly why lowercase r cannot also be the
letter. A Matrix Portal names its colours instead, so it keeps both.
Next: Module Firmware · Companion
Start
Build it
- Hardware
- Module Firmware
- Provisioning
- Calibration
- Flaps & Character Sets
- SplitFlap Gateway
- Matrix Gateway
- LCD Gateway
Drive it
- Companion
- Built-in Apps
- Standalone & Docker
- Multiple Displays
- Home Assistant
- Vestaboard API
- MCP Server
- Using splitflap-os
Extend it
Reference
Hardware © Adam G Makes