← Halloween 2026

Cross-Pollination

Laboratory Show firmware 1.10.1

Magnetic-wand plant-hybrid puzzle across six identical autonomous cabinets, then an analog Seed Station finish. Real 5-trial design, per the boss's locked spec (2026-09-25). Show firmware cross_pollination.ino 1.10.1 (unit 6: 1.10.1-u6), last updated 2026-10-09.

→ Player Test Guide — trial-by-trial walkthrough with the real, current answers (standard cabinets and unit 6), audio track map, and hardware pinout.

On this page

Overview & player flow

Player uses a magnetic wand at a Pollination Cabinet to touch 9 numbered specimen boxes across 5 trials: a pair, a set of 3, three sequential single stages, three donor-recipient crosses, and a fixed 4-step sequence. Completing all 5 trials triggers a full cabinet light payoff and one of 3 Hybrid Index endings, picked at random and announced by audio — no physical hybrid is built in the cabinet itself. Players then go to the off-cabinet examination table and Field Guide to continue. See the Player Test Guide for the exact box sequence.

Each of the six cabinets is autonomous. Five run the identical standard firmware and SD card. Unit 6 is the exception: its boxes were photographed on 2026-10-07 and its clues were rewritten to point at what is really in its boxes, so it has its own answer path, its own build (1.10.1-u6) and its own SD card. Networking (the ESP32 show-network modem) is additive and never required for local gameplay.

Photos Cross-Pollination cabinet

Cross-Pollination cabinet.

Identity & readiness
FieldValue
Device classcross_pollination
Instancescross_pollination_01 … _06 (6 cabinets, interchangeable)
ControllersArduino Mega (game brain) + ESP32 (show-network modem: passes the Mega's status up and commands down, no game logic)
RoomLaboratory
Instance identitySet in Understudy (device name, e.g. "Cross-Pollination 1"), not on the Mega. No current firmware reads the 0–9 BCD thumbwheel from the original spec.
Spec statusLocked — the boss's own final design doc, received 2026-09-25 (Blackwood_Manor_Cross_Pollination_MASTER_TRIALS_1-5_LOCKED.docx), fully replaces the earlier family/stability/repair design
StatusShow firmware 1.10.1 (standard) and 1.10.1-u6 (unit 6), both compiled and registered in Understudy's firmware list on 2026-10-09. Flashing every unit to 1.10.1 is on Zach's to-do; the one unit on the show network (Cross-Pollination 1) last reported Mega firmware 1.9.4 (2026-10-12). Zach playtested unit 6 on 2026-10-09.
Open questionsWelcome audio (folder 08) is still not played by the game (attract loop vs. one-shot undecided). The idle-warning clip (folder 10) is a placeholder voice. Target stickers over the sensors: options drafted, not yet chosen. The analog Seed Station second phase is still unspecified.
Firmware

Source: platform/tools/cross_pollination/cross_pollination.ino (it replaced the old mega_dumb_slave.ino in late September; the audio still lives under platform/tools/mega_dumb_slave/audio/). Builds and flashing go through Understudy's firmware list, never by hand.

Latest firmware

ImageBoard targetVersionNotes
Game brain, standard cabinets (cross_pollination.ino)Arduino Mega 2560 1.10.1 Real 5-trial game, 9 hall sensors, 9 RGB squares, 9 blacklights, DFPlayer audio, random 1-of-3 Hybrid Index ending. ~51 KB flash, 53% RAM. Registered in Understudy 2026-10-09.
Game brain, unit 6 (same source, built with CP_UNIT=6)Arduino Mega 2560 1.10.1-u6 Same game and lighting; unit 6's own answer key and clue timings. Use "Flash other firmware" → 1.10.1-u6 for unit 6 (not plain Update). Needs the unit-6 SD card.
Show-network modem (device.ino, native Arduino)ESP32 arduino-0.19.1 (repo) Shared platform firmware. Its MEGA_LINK mode relays the Mega's status line up to Understudy and commands (including show standby/resume) down. Cross-Pollination 1's ESP32 currently reports arduino-0.17.0.

What changed since the first bench build (plain language)

Build list / BOM — per cabinet (×6)

Supplier part numbers are Placeholder until sourcing is locked. Components and quantities below are real (from the working spec).

QtyComponentRole / notesSupplier P/N
1Arduino Mega 2560Local game brain — 9 digital sensor inputs, needs multiple hardware UARTs (Serial2 for DFPlayer)PH
1ESP32Show-network modem (Mega Serial1)PH
9Digital Hall-effect sensors (A3144-family)To Mega digital pins 22–38 (even); shared 5 V + GNDPH
98×8 addressable RGB matrices (WS2812B/WS2815)576 px; 3 chains of 3 boxes each, one data pin per chainPH
9UV / blacklight zonesIndependent PWM channels, Mega pins 2–10PH
34-channel MOSFET PWM boards9 UV channels usedPH
1Magnetic wandNo electronicsPH
1DFPlayer Mini / YX5200 + microSDSemantic cues → tracks, Mega Serial2 @ 9600 baudPH
1Passive or powered speaker + 5-pin 3.5mm jack breakoutBench-confirmed working, 2026-09-25 — see Wiring belowPH
1Regulated 5 V supplyElectronics + RGB (parallel injection)PH
112 V UV supplySubject to tape verificationPH
1Reset buttonMega pin 12 to GND (tap / hold functions, see Firmware)PH
Wiring & service diagram / harness
⚠ Placeholder — service diagram not drawn yet The final one-sided ~8.5×5.5 in landscape B/W service diagram and the wire harness / formboard (loom) doc are produced from the reference cabinet, then frozen (component locations, harness routing, connector IDs, wire labels, cut lengths). The pin map itself (below) IS real and decided — the formal diagram artifact is what's still pending.

Mega pin map (checked against cross_pollination.ino 1.10.1, 2026-10-12)

FunctionMega pinsNotes
ARGB matrix chains44, 45, 463 independent chains, 3 boxes each (chain 0 = boxes 1–3, chain 1 = boxes 4–6, chain 2 = boxes 7–9)
Blacklight zones2–109 PWM zones, one per box
Reset button12 (to GND)Tap = reset, hold 2–6 s = box test, hold 6 s = photo mode
Hall sensors (9 digital)22, 24, 26, 28, 30, 32, 34, 36, 38Box 1 = pin 22 (lowest), ascending to box 9 = pin 38
DFPlayer Mini16 (TX2) / 17 (RX2)Serial2 hardware UART, 9600 baud
ESP32 modem18 (TX1) / 19 (RX1)Serial1: status up, commands down. Wiring and protocol: platform/tools/device/SWITCH-NODES.md ("Mega modem")

Hall sensor / box numbering (real — 9 digital sensors, one per box)

Box numbering: front view, top-left = box 1, reading left-to-right then top-to-bottom — box 1 is always the lowest Mega pin number.

Box 1 (pin 22) | Box 2 (pin 24) | Box 3 (pin 26)
Box 4 (pin 28) | Box 5 (pin 30) | Box 6 (pin 32)
Box 7 (pin 34) | Box 8 (pin 36) | Box 9 (pin 38)

RGB: three data chains, one per box-row (1–3 / 4–6 / 7–9), each chain a 3-panel daisy-chain on its own Mega pin; distribute 5 V in parallel — never rely on matrix-to-matrix power transfer. Common ground with the controller.

The firmware reverses all 3 chains: matrixChainReversed[] = {true, true, true}. For every chain, wire the daisy-chain with the higher-numbered box's panel first and the lower-numbered box's panel last (e.g. chain 0: box 3's panel first, box 1's panel last; the middle box in each chain — 2, 5, 8 — is unaffected either way).

Real provenance, so you know how much to trust each one: chain 0 (boxes 1–3) and chain 2 (boxes 7–9) were directly, live-verified on 2026-09-25 — a solid-color test per panel with Zach reading off which physical box lit which color, confirming the swap in both cases. Chain 1 (boxes 4–6) was not independently tested (wasn't lit during that session) — it's reversed in firmware only by inference from the identical hardware/wiring pattern on the other two chains. If you're wiring boxes 4–6, this is the one to double-check with the same direct per-panel color test before trusting it blind.

Separately, if a panel doesn't light at all (not wrong box, just nothing): before suspecting firmware, check the panel's own DIN/DOUT — this exact symptom on this exact project was once traced to DIN/DOUT wired backwards on a hand-soldered panel (data going into the panel's OUTPUT pin, not its input). The two pins often look identical on cheap panel silkscreen; worth confirming with the panel's own datasheet/labeling before assuming a deeper problem.

Audio output jack (5-pin 3.5mm breakout)

Real, bench-confirmed: DFPlayer's audio output → jack pin 2 only. No separate ground wire needed — the speaker gets ground through its own USB power connection. Confirmed working live, 2026-09-25.

Game logic

Real 5-trial state machine. Full trial-by-trial box sequence and answers (standard cabinets and unit 6): Player Test Guide.

State machine

IDLE (attract look) → TRIAL_1 (pair) → TRIAL_2 (set of 3) → TRIAL_3 (stages A → B)
→ TRIAL_4 (3× donor→recipient) → TRIAL_5 (fixed 4-step sequence)
→ FINALE → HYBRID_INDEX (random 1 of 3) → IDLE

The full light rules Zach set on site (and any rebuild of the light logic must keep) are in GAME-INFO.md. Source of truth: platform/tools/cross_pollination/cross_pollination.ino.

Media manifest

Folders on the show SD card (DFPlayer numbering). The script of every clip: platform/tools/mega_dumb_slave/audio/sd-card-root/AUDIO_SCRIPT.md; the per-track mapping: TRIAL_AUDIO_MAPPING.md in the same folder.

FolderContentStatus
01"Box 1" … "Box 9" (used only by the box test)On every official card
02Trial 1 cuesTranscribed
03Trial 2 cuesTranscribed
04Trial 3 cuesTranscribed 2026-09-27 (Stage C lines were never recorded, so Stage C is not played)
05Trial 4 cuesTranscribed; firmware remapped to the transcript
06Trial 5 cuesTranscribed
07Hybrid Index endings (3 tracks)Transcribed
08Welcome (40.0s)On the card, not played by the game yet (trigger point undecided)
10Idle warning ("will reset in 30 seconds")Placeholder voice until the real recording exists

Official SD cards

Five official standard cards (#1–#5, made 2026-09-30 to 2026-10-03) were written with provision_sd_card.sh and every file checked against the repo (57 files each). The register is platform/tools/cross_pollination/official-sd-cards.md. A card without folder 01 or 10 is an old-layout card: the box test will be silent on it.

Unit 6 needs its own card: Understudy audio set cross-pollination-sd-u6, version u6-2026-10-09-lavender (clues re-voiced for what is really in its boxes, e.g. "orange fronds", the lavender in box 6). A standard card in unit 6, or the unit-6 card in a standard cabinet, gives clues that don't match the boxes.

Show-control / tunable values (future)
⚠ Placeholder — future show-edit mode These are the named parameters an operator would adjust by voice in "show edit mode," resolved to an exact device + value and pushed live via Bifrost. Names, ranges, and defaults below are Placeholder illustrations — not wired to anything yet.
ParameterTargetRangeDefault
rgb_brightness PHRGB matrices0–255180
uv_hold_ms PHUV zones0–100003000
success_volume PHDFPlayer0–3022
Open items
  1. Flash every unit to 1.10.1 (unit 6: "Flash other firmware" → 1.10.1-u6) through Understudy.
  2. Photo-mode photos of each unit, so the other cabinets' clues and colors can be checked against their real boxes the way unit 6 was.
  3. Target stickers over the hall sensors: options A–E drafted in print/targets/ (compare-v2.html), not yet chosen; the narration may then mention the target.
  4. Ceiling lights above the cabinets (Zach's 2026-10-10 list).
  5. Decide the Welcome clip's (folder 08) trigger point; record the real idle-warning clip (folder 10).
  6. Confirm the boxes 4–6 chain order with a per-panel color test (inferred, see Wiring).

Open design item: the analog Seed Station second phase (Field Guide, worksheet, capsule) is not yet specified electronically.

Photos of unit 6's nine boxes and the script review against them: boxes/README.md.