47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
//! Демонстрирует мигание произвольного текста в выбранной позиции через `print_at`.
|
|
|
|
mod common;
|
|
|
|
use anyhow::Result;
|
|
|
|
use m::worker::VfdWorker;
|
|
|
|
fn main() -> Result<()> {
|
|
// args:
|
|
// 1) port (default: /dev/cu.usbmodem101)
|
|
// 2) width (default: 20)
|
|
// 3) delay_ms (default: 400)
|
|
// 4) x (default: 1) 1-based
|
|
// 5) y (default: 1) 1-based line
|
|
// 6) text (default: "BLINK")
|
|
let mut args = common::ExampleArgs::from_env();
|
|
let delay_ms: u64 = args.parse_or(400);
|
|
let x: u8 = args.parse_or(1);
|
|
let y: u8 = args.parse_or(1);
|
|
let text = args.string_or("BLINK");
|
|
let text_len = text.chars().count();
|
|
|
|
let worker = VfdWorker::start(args.config)?;
|
|
let vfd = worker.handle();
|
|
|
|
vfd.clear();
|
|
|
|
let _ = vfd.print_line_diff(1, "blink demo (print_at)");
|
|
if y != 1 {
|
|
let _ = vfd.print_at(1, y, ""); // просто чтобы “активировать” строку у некоторых дисплеев
|
|
}
|
|
|
|
let blank = " ".repeat(text_len);
|
|
|
|
let mut on = false;
|
|
loop {
|
|
if on {
|
|
let _ = vfd.print_at(x, y, &blank);
|
|
} else {
|
|
let _ = vfd.print_at(x, y, &text);
|
|
}
|
|
on = !on;
|
|
common::sleep_ms(delay_ms);
|
|
}
|
|
}
|