//! Демонстрирует фоновую бегущую строку с регулируемой скоростью и паузой в конце. mod common; use anyhow::Result; use std::time::Duration; 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 mut args = common::ExampleArgs::from_env(); let cps: u32 = args.parse_or(8); let end_pause_ms: u64 = args.parse_or(1500); let brightness: u8 = args.parse_or(2); let worker = VfdWorker::start(args.config)?; 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 { common::sleep_ms(3_600_000); } }