您现在的位置是:首页 > 技术教程 正文

【树莓派+python】实现三色呼吸灯+按钮切换

admin 阅读: 2024-03-24
后台-插件-广告管理-内容页头部广告(手机)

文章目录

  • 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环境配置

  1. 在Vscode中使用SSH连接树莓派

  2. 按Ctrl+Shift+~调用bash

  3. 在命令行中输入python -m venv myenv创建虚拟环境,其中myenv是自定义的虚拟环境名称
    谢谢杨老板抓虫…之前写成pip了

  4. 在命令行中输入source myenv/bin/activate激活虚拟环境

  5. 在本次实验中需要安装以下包:

    激活虚拟环境后输入以下命令安装包 pip install gpiozero pip install rpi-gpio pip install lgpio
    • 1
    • 2
    • 3
    • 4
  6. 在命令行中输入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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

三色呼吸灯+按钮控制

加入按钮后。设置了一个布尔类型的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_thread print(breathing) # 创建并启动一个新线程来监视breathing变量的状态 if breathing==False: # 如果不处于呼吸状态,则开始呼吸灯效果 breathing = True # 创建并启动一个新线程来执行呼吸灯效果 breathe_thread = Thread(target=breathe) breathe_thread.start() else: # 否则停止呼吸灯效果 breathing = False red_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: return red_led.off() ... # 创建按钮对象,代表控制按钮 button = Button(12,bounce_time=0.2) while(True): # 当按键被按下时调用button_pressed函数 button.when_pressed= button_pressed # 进入暂停模式,等待中断信号 pause()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索