Tilt & Parallax

PHYSICAL ATTITUDE WITHOUT BLURRED PIXELS
The 160×160 Seed is split into horizontal bands. Each receives integer translation and shear instead of one subpixel transform over the PNG.
Board axes
The QMI8658 is rotated 90° relative to the display. The one authoritative mapping is:
screen tilt X = -(sensor Y - neutral Y)
screen tilt Y = +(sensor X - neutral X)The earlier direct X/Y mapping inverted physical directions. The correction matches four-way isolation and the Waveshare Gravitysphere example.
Sampling pipeline
- A 33 ms IMU task reads accelerometer and gyroscope.
- A stable startup window establishes neutral.
- A 0.025 g dead zone removes table noise.
- 0.55 g maps to normalized 1.0.
- Low-pass filtering writes a controlled shared snapshot.
- Rendering reads normalized X/Y and never waits on I²C.
Three response levels
| Level | Max X/Y travel | Shear | Use |
|---|---|---|---|
| LOW | 3 / 2 px | 2 | Gentle glass parallax |
| MID | 6 / 4 px | 4 | Default balance |
| HIGH | 10 / 7 px | 7 | Strong response and STAR RUSH |
All final offsets are integers. A clearance validator covers 750 core poses and rejects any HIGH sample whose alpha overlaps surrounding UI.
Wake recalibration
Ambient keeps the latest five real acceleration samples. First wake touch freezes the pre-touch posture as neutral, excluding release movement from calibration. The same touch transaction is still fully consumed.
Web simulation
The web Demo can synthesize tilt from pointer position to freeze visuals. Physical hardware does not fake sensor input: AUTO reads QMI8658.
