/*@BUILD:include:src/header.html@*/

# PM_G-1 Grid

The off-the-shelf Pimoroni Pico Scroll Pack (a 17×7 white LED matrix + 4 buttons) on a plain Raspberry Pi Pico - sibling to the PM_K-1 Kit and PM_X-1 Explorer, sharing the engine, program-string grammar, and live-sync protocol with the web editor.

## What it is

Buildable now RP2040 (Raspberry Pi Pico)Pimoroni Pico Scroll Pack PIM545~$30

The Pico Scroll Pack (PIM545) plugs straight onto a Raspberry Pi Pico's headers: 119 white LEDs in a 17×7 matrix driven by an IS31FL3731 over I²C (individually brightness-controlled), and 4 buttons (A / B / X / Y). No soldering, no touchscreen, no joystick, no RGB - and no onboard speaker. About 65 × 25 × 10 mm on top of the Pico. Power is over VSYS (USB or battery).

It runs the native Rust firmware (`rust/pm-grid`), built on the same polymeter engine (the shared `track-format` crate) and program strings as the web editor. The 7-row × 17-column matrix maps directly onto the editor's lane × step pad grid: each lane is a row, each step a column, and LED brightness encodes accent / normal / ghost. Audio is over USB-MIDI - turn on the editor's 🎹 Device audio to hear the clicks through your computer (the Scroll Pack has no speaker of its own).

Wiring - the Pico Scroll Pack fixed pinout (just press it onto the Pico)

Everything is wired through the header; this is what the firmware reads. Pins verified against Pimoroni's `pico_scroll` library.

Component | Pico pins
--- | ---
LED matrix - 17×7 white, IS31FL3731 (I²C @ 0x74)
SDA / SCL | GP4 / GP5
Buttons (digital, pull-up)
A (play/stop) / B (track) | GP12 / GP13
X (+bpm) / Y (-bpm) | GP14 / GP15
Audio - over USB-MIDI (the Scroll Pack has no speaker)

Controls & views

Button | Tap | Hold
--- | --- | ---
A | play / stop | cycle view (Ticker → Grid → Pendulum)
B | next track | next set list
X | tempo +1 | repeat (+5 after ~1.5 s)
Y | tempo -1 | repeat (-5 after ~1.5 s)

View | What the 17×7 matrix shows
--- | ---
Ticker | the track name infinite-scrolls along the left; a beat strip on the top row marks the beats with a bright playhead; the BPM is pinned right, rotated 90° CCW (a hundreds dot-bar + the last two digits). The whole matrix flashes on the downbeat.
Grid | lanes as rows, steps as columns; brightness = accent / normal / ghost; a bright playhead column tracks the beat (bars > 17 steps scale to fit - no steps dropped)
Pendulum | a column bounces across the bar like a metronome arm, full-height flash on each beat

The button mapping is deliberately simple (this is a UI prototype) and easy to re-bind in `rust/pm-grid/src/main.rs`.

Parts

Two off-the-shelf parts, no soldering - ballpark one-off price (USD).

Part | Qty | ~$
--- | --- | ---
Pimoroni Pico Scroll Pack (PIM545) - 17×7 white LED matrix (IS31FL3731) + 4 buttons | 1 | 22
Raspberry Pi Pico - RP2040; pre-soldered headers so the pack presses on | 1 | 5
USB cable - power + flashing (micro-USB) | 1 | 2
Total (one-off) |  | ≈ $29

Reference: Pico Scroll Pack product page · vendor code (pico_scroll).

Firmware - native Rust (flash the `.uf2`)

The Grid runs native Rust firmware (`rust/pm-grid`), sharing the same `track-format` engine crate as the web editor and the other devices. It's a button-driven LED metronome: three views (Ticker, Grid, Pendulum), the built-in set lists, tempo ramp + gap-trainer, and a whole-matrix flash on the downbeat. Audio plays through your computer over USB-MIDI - the Scroll Pack has no speaker. Flashing is a one-step `.uf2` drag (no CircuitPython, no drive bundle).

Download firmware (pm-grid.uf2) ↓ Source ↗

1. Flash it: hold BOOTSEL on the Pico, plug in USB (it appears as the `RPI-RP2` drive), and drag pm-grid.uf2 onto it. It flashes and reboots - "PM-G1 GRID" scrolls once, then the Ticker view.
2. Play through your computer: plug the Pico into your computer, open the editor in Chrome / Edge / Firefox, click 🎹 Device audio, and press A on the device - each click sounds through your speakers over USB-MIDI (GM channel 10).
3. Controls: A tap = play/stop, hold = cycle view; B tap = next track, hold = next set list; X / Y = tempo up / down (auto-repeats while held).

Built from `rust/pm-grid` via its `build.sh` (RP2040 / `thumbv6m`). For development, a Raspberry Pi Debug Probe flashes it and streams logs over `probe-rs` + `defmt` (the `pm-grid.elf` is served alongside for log decoding). Live-sync editing, on-device practice log and editor firmware-push are on the roadmap (not in the Rust build yet).

Pairs with the touch-driven PM_K-1 Kit and the button-driven PM_X-1 Explorer - same engine, same programs.json, same web editor.

/*@BUILD:include:src/footer.html@*/