《树莓派项目实战》第四节 用LED点阵显示爱心
Posted ren_meng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《树莓派项目实战》第四节 用LED点阵显示爱心相关的知识,希望对你有一定的参考价值。
第四节 用led点阵显示爱心
在本节,我们将学习如何用树莓派点亮led阵列显示出一个爱心。该项目涉及到的材料有:
- 树莓派 * 1
- 8*8 LED阵列 * 1
- 杜邦线若干
4.1 8*8LED点阵简介
LED点阵由LED灯(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画或视频。8*8LED点阵共由64个LED灯(发光二极管)组成,且每个LED灯放置在行线和列线的交叉点上。如果阵列每行的阳极连在一起,则该阵列为共阳;反之则为共阴。比如下方左图为共阴点阵,右图为共阳。
若点阵为共阳,将LED灯所在的行给高电平,而所在的列给低电平时,就可以点亮该LED灯;反之若点阵为共阴,将LED灯所在的行给低电平,而所在的列给高电平时,就可以点亮。
假如下图中的LED点阵为共阳,那么要点亮红点所在的LED灯的话,只需给第2行高电平,给第5列低电平即可。
这里有必要一提的是,在实际产品中引脚不会像上图那样规则排列,具体请看下一小节。
4.2 确定点阵引脚编号及引脚所在行列
当拿到一个没有规格说明的点阵时,我们就需要自己来确定引脚编号及其所控制的行列。
首先将侧面带有字那面朝上,引脚那面朝向自己。
上面一排引脚我们编号1-8,下面一排A-H。读者可以发现笔者的点阵上面一排有9个引脚,最左侧那一个其实是多余的,所以上排编号时忽略最左侧那一个。
除了通过以上方式确定引脚编号之外,还有另外一个方法。我们其实可以看到点阵背面的某个引脚旁边有个数字1,代表该引脚是这排的第一个引脚。那么另外一排则编号A-H,与引脚1处于同一列的引脚编号为A。
注:上面两种方法所确定的引脚编号是相同的。
确定好引脚编号后,我们亮出万用表。用红笔触碰引脚1,然后用黑笔滑过下面一排的各个引脚。此时就会发现某列或某行上的一些LED灯亮了,那么我们就可以知道引脚1是阳极,而且知道它控制哪一行。如果当红笔触碰某一引脚,黑笔滑过另一排引脚时没有任何LED灯亮起,那么红笔触碰的引脚为阴极。那为了确定该引脚所控制的列,就用黑笔触碰该引脚,红笔滑过另一排即可。
测试之后,笔者的各引脚功能如下:
引脚编号 | 阴极阳极 | 控制行列 |
1 | 阳极 | 第4行 |
2 | 阳极 | 第2行 |
3 | 阴极 | 第2列 |
4 | 阴极 | 第3列 |
5 | 阳极 | 第1行 |
6 | 阴极 | 第5列 |
7 | 阳极 | 第3行 |
8 | 阳极 | 第6行 |
A | 阴极 | 第8列 |
B | 阴极 | 第7列 |
C | 阳极 | 第7行 |
D | 阴极 | 第1列 |
E | 阳极 | 第5行 |
F | 阴极 | 第6列 |
G | 阴极 | 第4列 |
H | 阳极 | 第8行 |
可以发现,控制行的都是阳极,也就是说笔者这个点阵是共阳的。
接下来列出点亮各个LED灯所需要的引脚编号:
第1列 | 第2列 | 第3列 | 第4列 | 第5列 | 第6列 | 第7列 | 第8列 | |
第1行 | (5, D) | (5, 3) | (5, 4) | (5, G) | (5, 6) | (5, F) | (5, B) | (5, A) |
第2行 | (2, D) | (2, 3) | (2, 4) | (2, G) | (2, 6) | (2, F) | (2, B) | (2, A) |
第3行 | (7, D) | (7, 3) | (7, 4) | (7, G) | (7, 6) | (7, F) | (7, B) | (7, A) |
第4行 | (1, D) | (1, 3) | (1, 4) | (1, G) | (1, 6) | (1, F) | (1, B) | (1, A) |
第5行 | (E, D) | (E, 3) | (E, 4) | (E, G) | (E, 6) | (E, F) | (E, B) | (E, A) |
第6行 | (8, D) | (8, 3) | (8, 4) | (8, G) | (8, 6) | (8, F) | (8, B) | (8, A) |
第7行 | (C, D) | (C, 3) | (C, 4) | (C, G) | (C, 6) | (C, F) | (C, B) | (C, A) |
第8行 | (H, D) | (H, 3) | (H, 4) | (H, G) | (H, 6) | (H, F) | (H, B) | (H, A) |
现在如果要点亮第2行第5列的LED灯,我们只需给引脚2高电平,引脚F低电平即可。
4.3 将LED点阵连接到树莓派
笔者这里将1-8引脚分别连到了19、21、23、29、31、33、35和37 GPIO引脚上,将A-H引脚分别连到了18、22、24、26、32、36、38和40 GPIO引脚上。
注:笔者这里为了演示方便,没有添加限流电阻,这样做不推荐。
4.4 编写代码显示爱心
这是一个8*8LED点阵的简化图:
从上面的图可以知道,要点亮一个爱心的话我们需要点亮以下LED灯:
第1列 | 第2列 | 第3列 | 第4列 | 第5列 | 第6列 | 第7列 | 第8列 | |
第1行 | (5, D) | (5, 3) | (5, 4) | (5, G) | (5, 6) | (5, F) | (5, B) | (5, A) |
第2行 | (2, D) | (2, 3) | (2, 4) | (2, G) | (2, 6) | (2, F) | (2, B) | (2, A) |
第3行 | (7, D) | (7, 3) | (7, 4) | (7, G) | (7, 6) | (7, F) | (7, B) | (7, A) |
第4行 | (1, D) | (1, 3) | (1, 4) | (1, G) | (1, 6) | (1, F) | (1, B) | (1, A) |
第5行 | (E, D) | (E, 3) | (E, 4) | (E, G) | (E, 6) | (E, F) | (E, B) | (E, A) |
第6行 | (8, D) | (8, 3) | (8, 4) | (8, G) | (8, 6) | (8, F) | (8, B) | (8, A) |
第7行 | (C, D) | (C, 3) | (C, 4) | (C, G) | (C, 6) | (C, F) | (C, B) | (C, A) |
第8行 | (H, D) | (H, 3) | (H, 4) | (H, G) | (H, 6) | (H, F) | (H, B) | (H, A) |
现在开始编写代码:
import RPi.GPIO as GPIO
# 设置编码方式
GPIO.setmode(GPIO.BOARD)
# 设置引脚
num1, num2, num3, num4, num5, num6, num7, num8 = 19, 21, 23, 29, 31, 33, 35, 37
numA, numB, numC, numD, numE, numF, numG, numH = 18, 22, 24, 26, 32, 36, 38, 40
pins = [num1, num2, num3, num4, num5, num6, num7, num8,
numA, numB, numC, numD, numE, numF, numG, numH]
# 设置点亮爱心所需要的LED灯
heart = [(num7, numD), (num2, num3), (num2, num4), (num7, numG), (num7, num6), (num2, numF), (num2, numB), (num7, numA),
(num1, numA), (numE, numB), (num8, numF), (numC, num6), (numC, numG), (num8, num4), (numE, num3), (num1, numD)]
try:
# 将引脚设置为输出模式
for pin in pins:
GPIO.setup(pin, GPIO.OUT)
while True:
for led in heart:
# 点亮指定位置的LED灯
GPIO.output(led[0], GPIO.HIGH)
GPIO.output(led[1], GPIO.LOW)
# 给相关引脚设置相反的电平,相当于灭灯
GPIO.output(led[0], GPIO.LOW)
GPIO.output(led[1], GPIO.HIGH)
except KeyboardInterrupt:
# 释放引脚
GPIO.cleanup()
1. 设置好1-8和A-H的GPIO引脚。
2. 将点亮爱心所需要的LED灯添加到列表中。
3. 循环列表给第一个元素(行)设置高电平,给第二个元素(列)设置低电平。点亮之后,给相反的电平,相当于重置引脚。当然我们通过GPIO.cleanup(led)也能做到相应效果,不过释放引脚的的话,程序性能会更低。
4. 程序可以通过KeyboardInterrupt即Ctrl+C来停止。
运行视频如下:
树莓派用8*8LED点阵显示爱心
以上是关于《树莓派项目实战》第四节 用LED点阵显示爱心的主要内容,如果未能解决你的问题,请参考以下文章
Arduino实现8*8LED点阵显示爱心显示和Proteus仿真