//! Демонстрирует четыре уровня яркости и обновление строки mod common; use std::error::Error; use escpos_vfd::VfdWorker; fn main() -> Result<(), Box> { // Аргументы: // 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); } } }