Files
vfd/examples/position.rs
T

61 lines
1.6 KiB
Rust

//! Демонстрирует позиционирование символа и его движение по второй строке дисплея.
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: 80)
let mut args = common::ExampleArgs::from_env();
let delay_ms: u64 = args.parse_or(80);
let width = args.width;
let worker = VfdWorker::start(args.config)?;
let vfd = worker.handle();
vfd.clear();
// Статика
let _ = vfd.print_line_diff(1, "print_at demo");
let _ = vfd.print_line_diff(2, "--------------------"); // будет обрезано по width
// “курсор” бегает по 2-й строке
let y = 2u8;
let mut x: u8 = 1;
let mut dir: i8 = 1;
// чтобы не оставлять хвост — помним прошлую позицию и стираем её пробелом
let mut prev_x: u8 = x;
loop {
// стереть прошлую позицию
let _ = vfd.print_at(prev_x, y, " ");
// нарисовать новую
let _ = vfd.print_at(x, y, "█"); // можно заменить на "*" если надо
prev_x = x;
// шаг
if dir > 0 {
if (x as usize) >= width {
dir = -1;
} else {
x += 1;
}
} else {
if x <= 1 {
dir = 1;
} else {
x -= 1;
}
}
common::sleep_ms(delay_ms);
}
}