Примеры и документация
This commit is contained in:
74
examples/position.rs
Normal file
74
examples/position.rs
Normal file
@@ -0,0 +1,74 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user