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.
This commit is contained in:
+22
-16
@@ -1,36 +1,42 @@
|
||||
//! Демонстрирует четыре уровня яркости и обновление строки без полного мерцания.
|
||||
//! Демонстрирует четыре уровня яркости и обновление строки
|
||||
|
||||
mod common;
|
||||
|
||||
use anyhow::Result;
|
||||
use std::error::Error;
|
||||
|
||||
use m::worker::VfdWorker;
|
||||
use escpos_vfd::VfdWorker;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
// args:
|
||||
// 1) port (default: /dev/cu.usbmodem101)
|
||||
// 2) width (default: 20)
|
||||
// 3) delay_ms (default: 800)
|
||||
let mut args = common::ExampleArgs::from_env();
|
||||
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();
|
||||
vfd.clear()?;
|
||||
|
||||
// шапка один раз (не обязательно, но удобно)
|
||||
let _ = vfd.print_line_diff(1, "Яркость");
|
||||
// Шапку пишем один раз. Дальше меняем только вторую строку через diff, чтобы
|
||||
// дисплей не мерцал от полной перерисовки.
|
||||
vfd.print_line_diff(1, "Яркость")?;
|
||||
|
||||
loop {
|
||||
for level in 1u8..=4u8 {
|
||||
vfd.set_brightness(level);
|
||||
// Пресет текущего дисплея объявляет поддерживаемый диапазон яркости 1..=4.
|
||||
// Если уровень вне диапазона, метод вернёт typed error.
|
||||
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);
|
||||
vfd.print_line_diff(2, line2)?;
|
||||
|
||||
common::sleep_ms(delay_ms);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user