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) cps (chars per second, default: 8) // 4) end_pause_ms (default: 1500) // 5) brightness 1..4 (default: 2) 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 cps: u32 = std::env::args() .nth(3) .as_deref() .unwrap_or("8") .parse() .unwrap_or(8); let end_pause_ms: u64 = std::env::args() .nth(4) .as_deref() .unwrap_or("1500") .parse() .unwrap_or(1500); let brightness: u8 = std::env::args() .nth(5) .as_deref() .unwrap_or("2") .parse() .unwrap_or(2); let cfg = VfdConfig::new(port_name).with_width(width); let worker = VfdWorker::start(cfg)?; let vfd = worker.handle(); vfd.clear(); vfd.set_brightness(brightness); let text = String::from( "Однозначно, базовые сценарии поведения пользователей призывают нас к новым свершениям, которые, в свою очередь, должны быть объявлены нарушающими общечеловеческие нормы этики и морали. С другой стороны, понимание сути ресурсосберегающих технологий не даёт нам иного выбора, кроме определения экономической целесообразности принимаемых решений. Задача организации, в особенности же укрепление и развитие внутренней структуры обеспечивает актуальность соответствующих условий активизации. Предварительные выводы неутешительны: укрепление и развитие внутренней структуры однозначно фиксирует необходимость укрепления моральных ценностей. Высокий уровень вовлечения представителей целевой аудитории является четким доказательством простого факта: повышение уровня гражданского сознания представляет собой интересный эксперимент проверки поэтапного и последовательного развития общества.", ); // “рыба” + бесконечный цикл vfd.set_marquee_text(text); vfd.start_marquee(2, cps, Duration::from_millis(end_pause_ms)); // можно подсветить вторую строку статикой let _ = vfd.print_line_diff(1, "Бегущая строка"); loop { std::thread::sleep(Duration::from_secs(3600)); } }