4个版本 (稳定)
1.0.2 | 2020年1月7日 |
---|---|
1.0.1 | 2019年11月16日 |
1.0.0 | 2019年4月27日 |
0.1.0 | 2019年3月10日 |
在嵌入式开发中排名第569
每月下载1,140次
在6个包中使用(直接使用4个)
30KB
192 行
tiny-led-matrix
Rust库,用于直接控制小型单色LED显示屏。
此库旨在支持micro:bit的5×5显示屏,但此包中没有任何内容是特定于micro:bit的。
文档
https://docs.rs/tiny-led-matrix
变更日志
查看CHANGELOG.md
。
许可证
版权所有2019 Matthew Woodcraft。
根据以下任一许可证授权:
- Apache许可证2.0版本(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,将按上述方式双重许可,不附加任何额外的条款或条件。
lib.rs
:
直接控制小型单色LED显示屏的库。
此库旨在支持micro:bit的5×5显示屏,但此包中没有任何内容是特定于micro:bit的。
该库假定显示屏内部组织为一个二维的行和列矩阵,单个LED直接寻址(通常每行一个GPIO引脚,每列一个GPIO引脚)。
它不适用于您使用少量输出引脚“时钟”LED行的显示屏类型。
显示模型
LED显示屏必须组织为二维的矩阵行和矩阵列数组。这些描述了LED的连接方式,无需与它们的可见排列相匹配。
在任何时候,最多只有一个矩阵行的LED被点亮;显示屏驱动器依次点亮每一行的LED以创建稳定图像的错觉。
目前此包支持最多16列矩阵。行数没有严格的限制,但在实践中它必须很小,以便LED在合理的时间内点亮。
灰度模型
LED亮度级别使用从0(关闭)到9(最亮)的刻度描述。
这些转换为时间切片,使用与micro:bit MicroPython端口相同的相对持续时间。
每个大于1级的时隙大约是前一级的1.9倍。
如果显示中有三个矩阵行,则亮度为9的LED会亮起三分之一的时长。
为设备配置库。
要使用此库,您需要提供描述您的设备和其显示的多个特质的实现。
矩阵
您必须提供一个描述矩阵尺寸以及矩阵如何对应可见LED排列的Matrix
特质的实现。
图像和渲染
Render
特质定义了一个图像类型需要提供以供显示的接口。
根据可见排列的坐标,图像报告给定LED的亮度。
此crate不提供任何Render
的实现;您应该定义至少一个适当大小的图像类型,并为其实现Render
。
帧
实现Render
的类型用于更新一个Frame
(该帧随后传递给一个Display
)。
Frame
实例是所需尺寸的灰度图像的'编译'表示,这种表示形式可以直接由显示代码使用。
这公开在公共API中,以便您可以在低优先级的代码中构建Frame
表示形式。然后只需在无法被显示计时器中断的代码中调用Display::set_frame()
。
您必须提供一个实现Frame
特质的实现。
计时器控制
Display
期望控制一个计时器,该计时器将在适当的时间生成中断。[Display::handle_event()
]旨在从中断中调用。
您必须提供一个实现DisplayTimer
特质的实现,提供Display
需要控制计时器的接口。
DisplayTimer
实现决定了显示的刷新率。
Display
请求在下一个行应该被点亮的时刻的中断。在渲染灰度图像时,它会在每行的时段内请求额外的中断。它只为所需的灰度级别请求中断,这些灰度级别对应于当前显示的内容。
LED控制
Display
期望能够点亮给定矩阵行中的任意子集的LED。
您必须提供一个实现DisplayControl
特质的实现,以提供所需的接口。
使用库
显示
Display
实例控制LED并编程计时器。在使用此库的程序中,通常只有一个Display
实例。
Display
是一个泛型类型,它可以接受实现 Frame
的类型,而 Frame
类型又决定了所使用的 Matrix
。
综合来看
一旦你提供了所有必要的特质的实现,你可以按照以下方式使用这个库
当你的程序启动时,调用 [initialise_control()
](传递实现 DisplayControl
的设备)和 [initialise_timer()
](传递实现 DisplayTimer
的设备),并使用你的 Frame
类型创建一个 Display
。
在为 initialise_timer()
使用的定时器的中断处理程序中,调用 [Display::handle_event()
],并传递相同的两个设备。
要显示一个图像:创建一个 Frame
实例,使用 [Frame::set()
] 将图像放入其中,然后调用 [Display::set_frame()
].
只要你不中断,或者不被 handle_event()
中断,你可以随时调用 set_frame()
。
一旦你调用了 set_frame()
,你就可以自由地重用 Frame
实例。