diff --git a/rust/pm-kit/src/main.rs b/rust/pm-kit/src/main.rs index 0e0e95c..9091b73 100644 --- a/rust/pm-kit/src/main.rs +++ b/rust/pm-kit/src/main.rs @@ -184,6 +184,7 @@ fn main() -> ! { let (mut pa, mut pb) = (false, false); let mut joy_zone = 0i8; let mut full_redraw = true; + let mut last_draw_us = 0u64; let mut hb = false; let mut hb_us = 0u64; led.set_low().unwrap(); @@ -262,8 +263,9 @@ fn main() -> ! { let _ = spk.channel_b.set_duty_cycle(0); } - // ---- draw: full screen only on change; the bar-position strip every frame ---- - if full_redraw { + // ---- draw: on change, and periodically (so a draw lost right after init reappears, and + // the playhead advances). ~7 fps; partial/playhead-only redraw is the next optimization. ---- + if full_redraw || now.wrapping_sub(last_draw_us) > 140_000 { let lanes: Vec = track .lanes .iter() @@ -282,8 +284,8 @@ fn main() -> ! { pm_ui::draw_metronome(&mut display, &screen).ok(); } full_redraw = false; + last_draw_us = now; } - let _ = pm_ui::draw_progress(&mut display, phase, playing, 62); // heartbeat LED (~1 Hz) if now.wrapping_sub(hb_us) > 500_000 {