use anyhow::Result; use std::time::Duration; use m::vfd::VfdConfig; use m::worker::VfdWorker; fn main() -> Result<()> { // args: // 1) port (default: /dev/cu.usbmodem101) // 2) width (default: 20) // 3) delay_ms (default: 800) let port_name = std::env::args() .nth(1) .unwrap_or("/dev/cu.usbmodem101".into()); let width: usize = std::env::args() .nth(2) .as_deref() .unwrap_or("20") .parse() .unwrap_or(20); let delay_ms: u64 = std::env::args() .nth(3) .as_deref() .unwrap_or("800") .parse() .unwrap_or(800); let cfg = VfdConfig::new(port_name).with_width(width); let worker = VfdWorker::start(cfg)?; let vfd = worker.handle(); vfd.clear(); // шапка один раз (не обязательно, но удобно) let _ = vfd.print_line_diff(1, "Яркость"); loop { for level in 1u8..=4u8 { vfd.set_brightness(level); // обновляем строку медленно, через print_line_diff // можно сделать “индикатор” уровня (*****) let bar = "*".repeat(level as usize); let line2 = format!("Уровень: {} {}", level, bar); let _ = vfd.print_line_diff(2, line2); std::thread::sleep(Duration::from_millis(delay_ms)); } } }