|
Charlieplexing(查理复用算法)是一种使用少量I / O引脚控制许多LED的技术。 Charlieplexing与多路复用相同,但它使用三态逻辑(高、低输入)来显着减少引脚数并提高多路复用效率。 Charlieplexing技术以其发明者Charlie Allen命名,他于1995年发明了该技术。
Charlieplexing允许您控制N *(N - 1)个LED,其中N是引脚的编号。例如,您可以使用4个Arduino引脚4 *(4-1)= 12来控制12个LED。 LED是二极管,而在二极管中,电流仅在一个方向上流动。因此,在Charlieplexing中,我们将两个LED彼此并联连接,但极性相反,因此一次只能打开一个LED。对于Arduino或其他微控制器板,您没有足够的输入/输出引脚。如果您正在开发一个需要连接LCD显示器、一堆LED和一些传感器的项目,那么您已经没有引脚了。在这种情况下,您可以Charlieplex LED以减少引脚数量。
在本篇文章中,我们将使用Charlieplexing技术使用4个Arduino引脚控制12个LED。
需要的组件 ● Arduino UNO开发板 ● 12个LED指示灯 ● 4个电阻(330欧姆) ● 跳线 ● 面包板
电路原理图
在该电路图中,12个LED通过电阻与4个Arduino引脚连接。 Arduino的每个引脚都连接三个LED。有六组LED,每组中连接2个LED,两个LED彼此平行但极性相反,因此一次只能打开一个LED。因此根据电路图,点亮LED1时,需要在引脚A上有一个HIGH信号,在引脚B上需要一个LOW信号,并且需要断开引脚C和D。其他LED将遵循相同的步骤。下面给出了每个LED的引脚设置的完整表格: LED编号 | 引脚8 | 引脚9 | 引脚10 | 引脚11 | 1 | HIGH | LOW | INPUT | INPUT | 2 | LOW | HIGH | INPUT | INPUT | 3 | INPUT | HIGH | LOW | INPUT | 4 | INPUT | LOW | HIGH | INPUT | 5 | INPUT | INPUT | HIGH | LOW | 6 | INPUT | INPUT | LOW | HIGH | 7 | HIGH | INPUT | LOW | INPUT | 8 | LOW | INPUT | HIGH | INPUT | 9 | INPUT | HIGH | INPUT | LOW | 10 | INPUT | LOW | INPUT | HIGH | 11 | HIGH | INPUT | INPUT | LOW | 12 | LOW | INPUT | INPUT | HIGH |
连接后,硬件如下图所示。从图像中可以看出,有六组LED,每组中有两个LED彼此相对连接。 Arduino UNO模块由USB端口供电。
代码说明 本篇文章结尾处给出了完整代码,这里我们将解释完整的程序,以了解项目的工作情况。
在Arduino代码的开始部分中,先定义LED连接的所有引脚。之后,定义LED总数和LED状态。 - #define A 8
- #define B 9
- #define C 10
- #define D 11
- #define PIN_CONFIG 0
- #define PIN_STATE 1
- #define LED_Num 12
复制代码现在创建一个用于按顺序打开和关闭LED的数组,您可以通过更改引脚状态和引脚配置来更改序列。根据这个矩阵,首先打开LED1然后再打开LED2,依此类推。 - int matrix[LED_No.][2][4] = {
- // PIN_CONFIG PIN_STATE
- // A B C D A B C D
- { { OUTPUT, OUTPUT, INPUT, INPUT }, { HIGH, LOW, LOW, LOW } },
- { { OUTPUT, OUTPUT, INPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
- { { INPUT, OUTPUT, OUTPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
- …………………………….
- ……………………………..
复制代码在void loop函数内,程序将执行LED_COUNT矩阵以按给定顺序打开和关闭LED。 - void loop() {
- for( int l = 0; l < LED_Num; l++ ) {
- lightOn( l );
- delay( 1000 / LED_Num );
- }
复制代码
现在将Arduino连接到笔记本电脑并正确选择开发板和端口,然后单击上传按钮。上传代码后,LED应开始闪烁。
以上就是Charlieplexing技术如何用于使用更少的Arduino引脚来控制许多LED。您可以使用此方法来控制更多LED。例如,如果要控制20个LED,只需编辑数组并添加剩余的LED。
代码 本文使用的完整代码如下所示:
main.rar
(479 Bytes, 下载次数: 75)
|