Files
vfd/examples/brightness.rs
T
Кобелев Андрей Андреевич 244d907cc2 Rename crate to escpos-vfd and add tokio support
Rename crate to escpos-vfd and add tokio support

Introduce a configurable crate-ready API with presets, typed errors,
optional Tokio async support, and expanded documentation.
2026-08-16 11:24:20 +05:00

45 lines
2.0 KiB
Rust

//! Демонстрирует четыре уровня яркости и обновление строки
mod common;
use std::error::Error;
use escpos_vfd::VfdWorker;
fn main() -> Result<(), Box<dyn Error>> {
// Аргументы:
// 1) port - serial-порт дисплея (по умолчанию /dev/cu.usbmodem101);
// 2) width - ширина дисплея в символах (по умолчанию 20);
// 3) delay_ms - пауза между уровнями яркости (по умолчанию 800).
let mut args = common::ExampleArgs::from_env()?;
let delay_ms: u64 = args.parse_or(800);
// Worker держит serial-порт в отдельном потоке. Важно сохранить `worker` в
// переменной: если он будет уничтожен, Drop остановит фоновую запись.
let worker = VfdWorker::start(args.config)?;
let vfd = worker.handle();
vfd.clear()?;
// Шапку пишем один раз. Дальше меняем только вторую строку через diff, чтобы
// дисплей не мерцал от полной перерисовки.
vfd.print_line_diff(1, "Яркость")?;
loop {
for level in 1u8..=4u8 {
// Пресет текущего дисплея объявляет поддерживаемый диапазон яркости 1..=4.
// Если уровень вне диапазона, метод вернёт typed error.
vfd.set_brightness(level)?;
// Индикатор обновляется с той же паузой, чтобы глазами было видно, какой
// уровень сейчас активен.
let bar = "*".repeat(level as usize);
let line2 = format!("Уровень: {} {}", level, bar);
vfd.print_line_diff(2, line2)?;
common::sleep_ms(delay_ms);
}
}
}