Files
vfd/examples/brightness.rs
Кобелев Андрей Андреевич 446a710e01 init
2026-01-28 01:36:35 +05:00

54 lines
1.4 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: 800)
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("800")
.parse()
.unwrap_or(800);
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, "Яркость");
loop {
for level in 1u8..=4u8 {
vfd.set_brightness(level);
// обновляем строку медленно, через print_line_diff
// можно сделать “индикатор” уровня (*****)
let bar = "*".repeat(level as usize);
let line2 = format!("Уровень: {} {}", level, bar);
let _ = vfd.print_line_diff(2, line2);
std::thread::sleep(Duration::from_millis(delay_ms));
}
}
}