文章目录
- Traffic-lights
- 电路连接
- 在这里插入图片描述
- 代码实现
- 算法设计流程图
- python环境配置
- 三色呼吸灯实现
- 三色呼吸灯+按钮控制
Traffic-lights
电路连接
【元件实物图】
- 图1为Button,按钮的状态控制SIG引脚的电平值。
- 图2为RGB灯,有三种颜色:R-red、G-green、B-blue。三种颜色需由不同的GPIO引脚控制
- 图3为连接好按钮、RGB灯的树莓派
【GPIO引脚连线图】
【模拟连线图】
为了方便连接,RGB LED灯的三个引脚接GPIO 2、3、4,GND接GND。按钮的SIG引脚接GPIO 17, GND接GND。
代码实现
算法设计流程图
python环境配置
-
在Vscode中使用SSH连接树莓派
-
按Ctrl+Shift+~调用bash
-
在命令行中输入
python -m venv myenv
创建虚拟环境,其中myenv是自定义的虚拟环境名称
谢谢杨老板抓虫…之前写成pip了 -
在命令行中输入
source myenv/bin/activate
激活虚拟环境 -
在本次实验中需要安装以下包:
激活虚拟环境后输入以下命令安装包 pip install gpiozero pip install rpi-gpio pip install lgpio
-
在命令行中输入
deactivate
退出虚拟环境
三色呼吸灯实现
为了实现呼吸灯,首先需要控制灯的亮度实现渐变。TrafficLights类提供参数pwm,使用PWM 调光实现亮度的渐变。PWM调光的原理如下图所示。通过占空比来改变电子元件的功率。
因此可以写出代码如下,实现效果为:RGB灯以红、绿、蓝的颜色顺序循环呼吸,每个颜色呼吸3秒
# 呼吸灯效果函数
def breathe():while breathing:red_led.on()red_led.pulse()sleep(3)red_led.off()green_led.on()green_led.pulse()sleep(3)green_led.off()blue_led.on()blue_led.pulse()sleep(3)blue_led.off()breathe()
三色呼吸灯+按钮控制
加入按钮后。设置了一个布尔类型的breathing作为标志。当每次按下button的时候,调用button_pressed函数,当此时breathing为False,也就是当时没有在呼吸时,将breathing设为True,并调用breathe函数开始呼吸;当此时breathing为True,也就是当时在呼吸时,将breathing设为False,此时breathe函数内部每0.1秒检查一次breathing的值,此时检查为False则停止呼吸。循环进行,直到下一次按按钮。
实现效果为:
- 第一次按按钮,RGB开始以红、绿、蓝的顺序开始呼吸
- 第二次按按钮,呼吸停止
- 反复循环直至Ctrl+C退出程序
# 是否处于呼吸状态的标志
breathing = False# 按钮按下时的处理函数
def button_pressed():global breathing, breathe_threadprint(breathing)# 创建并启动一个新线程来监视breathing变量的状态if breathing==False:# 如果不处于呼吸状态,则开始呼吸灯效果breathing = True# 创建并启动一个新线程来执行呼吸灯效果breathe_thread = Thread(target=breathe)breathe_thread.start()else:# 否则停止呼吸灯效果breathing = Falsered_led.off()green_led.off()blue_led.off()
# 呼吸灯效果函数
def breathe():while breathing:red_led.on()red_led.pulse()for i in range(30):sleep(0.1)if not breathing:returnred_led.off()...# 创建按钮对象,代表控制按钮
button = Button(12,bounce_time=0.2)
while(True):# 当按键被按下时调用button_pressed函数button.when_pressed= button_pressed# 进入暂停模式,等待中断信号pause()