Charlieplexing是一种使用几个I / O引脚控制许多LED的技术。Charlieplexing与多路复用相同,但是它使用三态逻辑(高,低输入)来大大减少引脚数并通过多路复用获得效率。Charlieplexing技术以其发明者Charlie Allen的名字命名,他于1995年发明了该技术。我们以前在Arduino中使用多路复用技术来连接4位7段显示器并驱动8x8 LED矩阵。
Charlieplexing允许您控制N *(N – 1)个LED,其中N是引脚数。例如,您可以使用4个Arduino引脚4 *(4-1)= 12控制12个LED。LED是二极管,在二极管中,电流仅沿一个方向流动。因此,在Charlieplexing中,我们将两个并联但极性相反的LED相互连接,从而一次只能打开一个LED。对于Arduino或其他微控制器板,您永远没有足够的输入/输出引脚。如果您正在从事一个需要连接LCD显示屏,一堆LED和一些传感器的项目,那么您已经用不完了。在这种情况下,您可以对LED进行复合照明以减少引脚数。
在本教程中,我们将使用Charlieplexing技术通过4个Arduino引脚控制12个LED。
所需组件
- Arduino UNO
- LED灯(12)
- 4个电阻器(330欧姆)
- 跳线
- 面包板
电路原理图
基本上,在此电路图中,通过电阻将12个LED与4个Arduino引脚相连。Arduino的每个引脚都与三个LED连接。有六组LED,每组中连接2个LED,并且两个LED彼此平行但极性相反,因此一次只能打开一个LED。因此,根据导通LED 1的电路图,引脚A上必须有一个HIGH信号,而引脚B上需要有一个LOW信号,并且引脚C和D需要断开。其他LED将遵循相同的步骤。每个LED的引脚设置的完整表如下所示:
LED | 销8 | 销9 | 针脚10 | 销11 |
1个 | 高 | 低 | 输入 | 输入 |
2 | 低 | 高 | 输入 | 输入 |
3 | 输入 | 高 | 低 | 输入 |
4 | 输入 | 低 | 高 | 输入 |
5 | 输入 | 输入 | 高 | 低 |
6 | 输入 | 输入 | 低 | 高 |
7 | 高 | 输入 | 低 | 输入 |
8 | 低 | 输入 | 高 | 输入 |
9 | 输入 | 高 | 输入 | 低 |
10 | 输入 | 低 | 输入 | 高 |
11 | 高 | 输入 | 输入 | 低 |
12 | 低 | 输入 | 输入 | 高 |
连接后,我的硬件如下图所示。从图像中可以看到,有六组LED,每组2个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 = { // PIN_CONFIG PIN_STATE // ABCDABCD {{输出,输出,输入,输入},{高,低,低,低}}, {{输出,输出,输入,输入},{低,高,低,LOW}}, {{INPUT,OUTPUT,OUTPUT,INPUT},{LOW,HIGH,LOW,LOW}}, ………………………………。 …………………………..
现在在 void循环 内部,程序将执行LED_COUNT矩阵以给定顺序打开和关闭LED。
void loop(){ for(int l = 0; l <LED_Num; l ++){ lightOn(l); 延迟(1000 / LED_Num); }
现在将Arduino与笔记本电脑连接,并正确选择板子和端口,然后单击Upload按钮。上载代码后,您的LED应开始闪烁。
因此,这就是Charlieplexing技术可用于使用较少的Arduino引脚来控制许多LED的方式。您可以使用此方法来控制更多数量的LED。例如,如果要控制20个LED,只需编辑矩阵并添加剩余LED的条件。
在下面找到完整的代码和工作视频。