#sign #bus #luminator #rs-485 #pixel

flipdot

一个用于通过RS-485与Luminator翻转点阵和LED标牌交互的库

3个不稳定版本

0.7.1 2024年3月4日
0.7.0 2024年3月2日
0.6.0 2021年3月3日

#sign 中排名 4

Download history

每月下载量 114

MIT 许可证 MIT

150KB
1.5K SLoC

flipdot

Build status Crates.io Docs.rs

一个用于通过RS-485与Luminator翻转点阵和LED标牌交互的Rust库。

提供了一种连接到标牌、定义跨越一个或多个页面的消息、将这些页面发送到标牌以及在这些页面之间切换的方式。不提供特殊的图形或文本功能;您需要自己设置页面上的像素。

已在MAX3000 90 × 7侧标牌上测试。应该适用于任何使用7针圆形连接器的翻转点阵或LED标牌,但不能保证。

仅适用于爱好者和教育目的。与Luminator没有任何关联。

用法

以下是一个通过串行连接到标牌、发送页面并显示它们的完整示例

use std::cell::RefCell;
use std::rc::Rc;
use flipdot::{Address, PageFlipStyle, PageId, Sign, SignType, SerialSignBus};

// Set up bus. Because the bus can be shared among
// multiple signs, it must be wrapped in an Rc<RefCell>.
let port = serial::open("/dev/ttyUSB0")?;
let bus = SerialSignBus::try_new(port)?;
let bus = Rc::new(RefCell::new(bus));

// Create a sign with the appropriate address and type.
let sign = Sign::new(bus.clone(), Address(3), SignType::Max3000Side90x7);

// First, the configuration data must be sent to the sign.
sign.configure()?;

// Next, we can create some pages, turn on pixels, and send them to the sign.
let mut page1 = sign.create_page(PageId(0));
page1.set_pixel(0, 0, true);
let mut page2 = sign.create_page(PageId(1));
page2.set_pixel(1, 1, true);

// We only need to explicitly flip pages if PageFlipStyle::Manual is returned,
// otherwise the sign will automatically show and flip pages.
if sign.send_pages(&[page1, page2])? == PageFlipStyle::Manual {
    // The first page is now loaded in the sign's memory and can be shown.
    sign.show_loaded_page()?;

    // Load the second page into memory, then show it.
    sign.load_next_page()?;
    sign.show_loaded_page()?;
}

子库

除了 Sign 的高级API之外,还提供了一些低级组件,可以组合起来用于更专业的用例。

  • flipdot-core (重新导出为 core) 包含描述协议的基本类型,如果您想实现自定义 SignBus 或在其他层面上操作,则很有用。
  • flipdot-serial (重新导出为 serial) 包含配置串行端口的函数以及 SerialSignBus 的实现。
  • flipdot-testing 包含一些与直接与标牌通信无关的工具,但用于测试和调试很有用。

许可证

MIT 许可证 下分发。

依赖关系

~2.7–4.5MB
~77K SLoC