Примеры и документация
This commit is contained in:
62
examples/blink.rs
Normal file
62
examples/blink.rs
Normal file
@@ -0,0 +1,62 @@
|
||||
use anyhow::Result;
|
||||
use std::time::Duration;
|
||||
|
||||
use m::vfd::VfdConfig;
|
||||
use m::worker::VfdWorker;
|
||||
|
||||
fn spaces(n: usize) -> String {
|
||||
" ".repeat(n)
|
||||
}
|
||||
|
||||
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 = std::env::args().skip(1);
|
||||
|
||||
let port_name = args.next().unwrap_or("/dev/cu.usbmodem101".into());
|
||||
|
||||
let width: usize = args.next().as_deref().unwrap_or("20").parse().unwrap_or(20);
|
||||
|
||||
let delay_ms: u64 = args
|
||||
.next()
|
||||
.as_deref()
|
||||
.unwrap_or("400")
|
||||
.parse()
|
||||
.unwrap_or(400);
|
||||
|
||||
let x: u8 = args.next().as_deref().unwrap_or("1").parse().unwrap_or(1);
|
||||
|
||||
let y: u8 = args.next().as_deref().unwrap_or("1").parse().unwrap_or(1);
|
||||
|
||||
let text = args.next().unwrap_or("BLINK".into());
|
||||
let text_len = text.chars().count();
|
||||
|
||||
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, "blink demo (print_at)");
|
||||
if y != 1 {
|
||||
let _ = vfd.print_at(1, y, ""); // просто чтобы “активировать” строку у некоторых дисплеев
|
||||
}
|
||||
|
||||
let blank = spaces(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;
|
||||
std::thread::sleep(Duration::from_millis(delay_ms));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user