#led-display #led-matrix #micro-bit #control #monochrome #direct #row

无std tiny-led-matrix

直接控制小型单色LED显示屏的库

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

Download history 361/week @ 2024-03-16 305/week @ 2024-03-23 348/week @ 2024-03-30 372/week @ 2024-04-06 557/week @ 2024-04-13 469/week @ 2024-04-20 404/week @ 2024-04-27 379/week @ 2024-05-04 397/week @ 2024-05-11 328/week @ 2024-05-18 343/week @ 2024-05-25 307/week @ 2024-06-01 293/week @ 2024-06-08 320/week @ 2024-06-15 317/week @ 2024-06-22 161/week @ 2024-06-29

每月下载1,140
6个包中使用(直接使用4个)

MIT/Apache

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许可证定义,您有意提交以包含在作品中的任何贡献,将按上述方式双重许可,不附加任何额外的条款或条件。


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 实例。

无运行时依赖