Files
vfd/examples/marquee.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

49 lines
3.8 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! Демонстрирует фоновую бегущую строку с регулируемой скоростью и паузой в конце.
mod common;
use std::error::Error;
use std::time::Duration;
use escpos_vfd::VfdWorker;
fn main() -> Result<(), Box<dyn Error>> {
// Аргументы:
// 1) port - serial-порт дисплея;
// 2) width - ширина строки, по ней worker строит кадры marquee;
// 3) cps - скорость в символах в секунду;
// 4) end_pause_ms - пауза после полного прохода текста;
// 5) brightness - яркость из диапазона пресета 1..=4.
let mut args = common::ExampleArgs::from_env()?;
let cps: u32 = args.parse_or(8);
let end_pause_ms: u64 = args.parse_or(1500);
let brightness: u8 = args.parse_or(2);
// Marquee живёт внутри worker-потока: основной поток может спать, а worker будет
// просыпаться по собственному таймеру и отправлять следующий кадр.
let worker = VfdWorker::start(args.config)?;
let vfd = worker.handle();
vfd.clear()?;
vfd.set_brightness(brightness)?;
let text = String::from(
"Однозначно, базовые сценарии поведения пользователей призывают нас к новым свершениям, которые, в свою очередь, должны быть объявлены нарушающими общечеловеческие нормы этики и морали. С другой стороны, понимание сути ресурсосберегающих технологий не даёт нам иного выбора, кроме определения экономической целесообразности принимаемых решений. Задача организации, в особенности же укрепление и развитие внутренней структуры обеспечивает актуальность соответствующих условий активизации. Предварительные выводы неутешительны: укрепление и развитие внутренней структуры однозначно фиксирует необходимость укрепления моральных ценностей. Высокий уровень вовлечения представителей целевой аудитории является четким доказательством простого факта: повышение уровня гражданского сознания представляет собой интересный эксперимент проверки поэтапного и последовательного развития общества.",
);
// Длинный текст сначала сохраняется в состоянии worker-а. `start_marquee` выбирает
// строку, скорость и паузу; сама анимация дальше идёт без ручного цикла кадров.
vfd.set_marquee_text(text)?;
vfd.start_marquee(2, cps, Duration::from_millis(end_pause_ms))?;
// Первая строка остаётся статикой. Вторую строку теперь лучше не обновлять обычными
// командами, пока на ней активна marquee.
vfd.print_line_diff(1, "Бегущая строка")?;
loop {
// Держим процесс живым. Если `main` завершится, `worker` попадёт в Drop и
// остановит фоновую анимацию.
common::sleep_ms(3_600_000);
}
}