125 lines
3.2 KiB
Markdown
125 lines
3.2 KiB
Markdown
# VFD — библиотека управления VFD-дисплеями (Epson mode)
|
||
|
||
Небольшая Rust-библиотека для управления **VFD-дисплеями Epson/ESC-совместимого режима**
|
||
(например PD-2600 / PD-2800 и похожие).
|
||
|
||
Подходит для:
|
||
|
||
- домашних IoT-проектов
|
||
- индикаторов состояния
|
||
- часов, дашбордов, уведомлений
|
||
- ретро-интерфейсов
|
||
|
||
Поддержка:
|
||
|
||
- печать текста по координатам
|
||
- обновление строк через diff (без мерцания)
|
||
- яркость дисплея
|
||
- программный marquee (бегущая строка)
|
||
- работа через serial (USB-UART)
|
||
|
||
---
|
||
|
||
## Возможности
|
||
|
||
- Двухстрочный дисплей (ширина настраивается)
|
||
- `print_line_diff` — обновление только изменённых символов
|
||
- Управление яркостью (1–4)
|
||
- Бегущая строка (marquee) в отдельном воркере
|
||
- Потокобезопасный API (worker + handle)
|
||
|
||
---
|
||
|
||
## Установка
|
||
|
||
Добавьте библиотеку в `Cargo.toml`:
|
||
|
||
```toml
|
||
[dependencies]
|
||
m = { path = "./path/to/vfd-lib" }
|
||
```
|
||
|
||
---
|
||
|
||
## Быстрый старт
|
||
|
||
```rust
|
||
use m::vfd::VfdConfig;
|
||
use m::worker::VfdWorker;
|
||
|
||
let cfg = VfdConfig::new("/dev/cu.usbmodem101")
|
||
.with_width(20);
|
||
|
||
let worker = VfdWorker::start(cfg)?;
|
||
let vfd = worker.handle();
|
||
|
||
vfd.clear();
|
||
vfd.set_brightness(2);
|
||
vfd.print_line_diff(1, "Hello VFD!");
|
||
vfd.print_line_diff(2, "It works!");
|
||
```
|
||
|
||
---
|
||
|
||
## Бегущая строка (marquee)
|
||
|
||
```rust
|
||
use std::time::Duration;
|
||
|
||
vfd.set_marquee_text(" Это пример бегущей строки ");
|
||
vfd.start_marquee(
|
||
2, // строка
|
||
8, // символов в секунду
|
||
Duration::from_millis(1500), // пауза в конце
|
||
);
|
||
```
|
||
|
||
Marquee работает в фоне и не мешает `print_line_diff`,
|
||
если не писать в ту же строку.
|
||
|
||
---
|
||
|
||
## Управление яркостью
|
||
|
||
```rust
|
||
vfd.set_brightness(1); // диапазон 1..4
|
||
```
|
||
|
||
Яркость можно менять динамически (ночной режим, «дыхание» и т.п.).
|
||
|
||
---
|
||
|
||
## Примеры
|
||
|
||
Запуск через `cargo run --example` или `task`:
|
||
|
||
```bash
|
||
cargo run --example clock -- /dev/cu.usbmodem101 20 8
|
||
cargo run --example marquee -- /dev/cu.usbmodem101 20 8 1500 2
|
||
cargo run --example brightness -- /dev/cu.usbmodem101 20 800
|
||
```
|
||
|
||
Примеры:
|
||
|
||
- `clock` — часы
|
||
- `marquee` — бегущая строка
|
||
- `brightness` — демонстрация яркости
|
||
|
||
---
|
||
|
||
## Требования
|
||
|
||
- Дисплей в **Epson-режиме** (DIP-переключатели)
|
||
- Скорость: 9600 baud
|
||
- Кодировка: CP866 (кириллица)
|
||
|
||
---
|
||
|
||
## Идеи для использования
|
||
|
||
- часы / дата / температура
|
||
- MQTT-дашборд
|
||
- уведомления умного дома
|
||
- статус сервиса / сборки
|
||
- ретро-индикатор
|