Files
vfd/examples/position.rs
Кобелев Андрей Андреевич 896670b62f Примеры и документация
2026-01-28 16:07:38 +05:00

75 lines
1.9 KiB
Rust

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: 80)
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("80")
.parse()
.unwrap_or(80);
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, "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;
}
}
std::thread::sleep(Duration::from_millis(delay_ms));
}
}