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

文章目录

  • 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
    
  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()

三色呼吸灯+按钮控制

加入按钮后。设置了一个布尔类型的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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525227.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运动想象 (MI) 迁移学习系列 (3) : MSFT

运动想象迁移学习系列:MSFT 0. 引言1. 主要贡献2. 数据增强方法3. 基于度量的空间滤波转换器3.1 空间过滤3.2 脑电图ViT3.2.1 变压器编码器层3.2.2 基于度量的损失函数 4. 实验结果4.1 消融实验4.2 基线任务对比4.3 跨主题 5. 总结欢迎来稿 论文地址:https://www.s…

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪,科技日新月异,经济、信息等方面都取得了长足的进步,特别是信息网络技术的飞速发展,对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利,开发一套基于java的大学生…

Day29:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作

目录 JS原生开发-DOM树-用户交互 JS导入库开发-编码加密-逆向调试 思维导图 JS知识点: 功能:登录验证,文件操作,SQL操作,云应用接入,框架开发,打包器使用等 技术:原生开发&#x…

如何在一个pycharm项目中创建jupyter notebook文件,并切换到conda环境中

1、第一步可以直接在pycharm项目中创建jupyter notebook文件 2、假若想要切换成pytorch环境做实验例子,会发现报这个错误 Jupyter server process exited with code 1 C:\Users\12430\.conda\envs\pytorch3.11\python.exe: No module named jupyter在这里&#xff…

Python基本数据类型之散列类型详解

前言: python的基本数据类型可以分为三类:数值类型、序列类型、散列类型,本文主要介绍散列类型。 一、散列类型 散列类型:内部元素无序,不能通过下标取值 1)字典(dict)&#xff…

训练验证码之ddddocr一个图文视频教学

目录 一、推荐文章视频一、ddddocr环境配置二、字符集验证码训练三、ocr_api_server服务搭建 一、推荐文章视频 文章原文来自这里:训练验证码-4、ddddocr训练字符验证码 , 原文文章末尾有视频介绍更多内容见训练验证码合集 一、ddddocr环境配置 1.打开…

守护Web安全:了解Web攻击与防护策略

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【C++进阶】哈希的应用 --- 布隆过滤器

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

macOS上实现「灵动岛」效果

自从Apple iPhone推出了「灵动岛」功能后,用户们就被其优雅的设计和强大的功能所吸引。然而,作为macOS用户,我们一直在等待这一功能能够在我们的设备上实现。现在,随着新的应用程序的推出,我们终于可以在我们的Mac上体…

300分钟吃透分布式缓存-25讲:Redis是如何处理容易超时的系统调用的?

BIO 线程简介 Redis 在运行过程中,不可避免的会产生一些运行慢的、容易引发阻塞的任务,如将内核中的文件缓冲同步到磁盘中、关闭文件,都会引发短时阻塞,还有一些大 key,如一些元素数高达万级或更多的聚合类元素&#…

C++篇 语 句

到目前为止,我们只见过两种语句: return 语句和表达式语句。根据语句对执行顺 序的影响,C 语言其余语句大多属于以下 3 大类。 选择语句: if 语句和 switch 语句。循环语句: while 语句, do...while 语句和…

部署LVS+Keepalived高可用群集(抢占模式,非抢占模式,延迟模式)

目录 一、LVSKeepalived高可用群集 1、实验环境 2、 主和备keepalived的配置 2.1 yum安装ipvsadm和keepalived工具 2.2 添加ip_vs模块并开启ipvsadm 2.3 修改keepalived的配置文件 2.4 调整proc响应参数,关闭linux内核的重定向参数响应 2.5 将主服务器的kee…