65.9K
CodeProject 正在变化。 阅读更多。
Home

8 位 LED 二进制计数器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.09/5 (6投票s)

2018年8月7日

CPOL

2分钟阅读

viewsIcon

16901

downloadIcon

115

树莓派实现二进制计数器,最初为Arduino板开发。

引言

本文提供了一个由树莓派3和8个LED供电的简单二进制计数器实现。它与之前为Arduino板在上一篇文章中完成的工作非常相似 将Arduino连接到面包板上点亮LED。在这个项目中,我们将使用Python来编程板子。

对于这个项目,我们需要一个树莓派套件(我使用的是其中一个 CanaKits),一个面包板,8个LED,8个220欧姆电阻(可以是不同的,例如330等),以及9根公对母跳线。 如果您决定不远程连接到树莓派,那么您还需要一个带有HDMI电缆、鼠标和键盘的显示器。

设置工作环境

我使用的是树莓派3的默认安装,其中预装了Raspbian操作系统和Python。 确保您已安装最新的GPIO模块,因为代码使用它来写入GPIO引脚。

$ sudo apt-get update
$ sudo apt-get install python-rpi.gpio python3-rpi.gpio

我在我的树莓派上启用了Wi-Fi,并配置了 安全外壳 (SSH),以便我可以使用Putty从我的Windows机器远程连接到它。 这样,我们就不需要显示器、鼠标、键盘和以太网电缆来与设备通信。 我们唯一需要的电缆是电源线。

安装Samba 后,我们可以从Windows机器访问工作文件并在我们最喜欢的文本编辑器中编辑它们。 或者,我们仍然可以使用随分发版一起提供的nano编辑器在终端窗口中。

连接电线

我们需要8根电线将GPIO引脚通过各自的电阻连接到相应的LED(加上1根用于地线的电线)。 这里,我决定使用33号引脚作为位0,37号引脚作为位1,等等(参见代码)。 下面的布局显示了哪些引脚可用。

Using the Code

在代码中,我们首先将8个选定的引脚设置为输出模式。 然后在循环中,我们通过应用相应的位掩码提取计数器的每个位的当前值,并设置映射到该位的单个GPIO引脚。

# counter.py
import RPi.GPIO as GPIO
import time

print "=== Binary counter ==="

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD) # access pins by their numbers	

# Configure 8 pins to output mode
GPIO.setup(33, GPIO.OUT) # pin 33 for bit 0
GPIO.setup(37, GPIO.OUT) # pin 37 for bit 1
GPIO.setup(7,  GPIO.OUT)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(21, GPIO.OUT) # pin 21 for bit 7

cnt = 0
print "Press Ctrl-C to exit"

try:
	while True:
		GPIO.output(33, cnt & 0x01) # set bit 0
		GPIO.output(37, cnt & 0x02) 
		GPIO.output(7,  cnt & 0x04)
		GPIO.output(11, cnt & 0x08)
		GPIO.output(13, cnt & 0x10)
		GPIO.output(15, cnt & 0x20)
		GPIO.output(19, cnt & 0x40)
		GPIO.output(21, cnt & 0x80) # set bit 7
		time.sleep(0.1)             # wait 100 msec
		cnt += 1 %  256				# increment counter up to 255, then reset to 0

except KeyboardInterrupt:
	GPIO.cleanup()

如果您将代码保存到counter.py文件中,只需运行此命令即可启动计数器

python counter.py

就这样。 祝您编码愉快!

© . All rights reserved.