Create README.md
This commit is contained in:
124
README.md
Normal file
124
README.md
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
# 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-дашборд
|
||||||
|
- уведомления умного дома
|
||||||
|
- статус сервиса / сборки
|
||||||
|
- ретро-индикатор
|
||||||
Reference in New Issue
Block a user