【树莓派+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. 在命令行中输入pip -m venv myenv创建虚拟环境,其中myenv是自定义的虚拟环境名称

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jpg 转 ico 强大的图片处理工具 imageMagick

点击下载 windows, mac os, linux版本 GitHub - ImageMagick/ImageMagick: 🧙‍♂️ ImageMagick 7 1. windows程序 链接:https://pan.baidu.com/s/1wZLqpcytpCVAl52pIrBBEw 提取码:hbfy 一直点击下一步安装 2. 然后 winr键 打开cmd 然…

动态代理详解

动态代理 一、JDK动态代理二、CGLIB动态代理三、Javassist动态代理技术 在程序运行阶段,在内存中动态生成代理类,被称为动态代理,目的是为了减少代理类的数量。解决代码复用的问题。 一、JDK动态代理 DK动态代理技术:只能代理接口…

备份 ChatGPT 的聊天纪录

备份 ChatGPT 的聊天纪录 ChatGPT 在前阵子发生了不少次对话纪录消失的情况,让许多用户觉得困扰不已,也担心自己想留存的聊天记录消失不见。 好消息是,OpenAI 在 2023 年 4 月 11 日推出了 ChatGPT 聊天记录备份功能,无论是免费…

怎么把视频内容快速转为文字?这三款工具助您轻松实现!

在现代社会,视频内容日益丰富多样,但有时我们更希望获得视频中的文字文稿,以便于搜索、编辑或传播。下面我将为您介绍三款优秀的视频转文字工具,它们能够帮助您快速、准确地将视频内容转换为可编辑的文字格式。让我们一起来看看这…

【JavaEE初阶】 JVM类加载简介

文章目录 🍃前言🌲类加载过程🚩加载🚩验证🚩准备🚩解析🚩初始化 🎄双亲委派模型🚩什么是双亲委派模型?🚩双亲委派模型的优点 ⭕总结 &#x1f343…

微服务:Docker篇

1. 初识Docker 1.1. 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一…

JavaScript极速入门(2)

JQuery W3C标准给我们提供了一系列函数,让我们可以操作: 网页内容 网页结构 网页样式 但是原生的JavaScript提供的API操作DOM元素时,代码比较繁琐,冗长.我们学习使用JQuery来操作页面对象. JQuery是一个快速,简洁且功能丰富的JavaScript框架,于2006年发布.它封装JavaScript常…

3dmax画图卡顿解决方法---模大狮模型网

当你在使用3D Max进行画图时遇到卡顿问题,可以尝试以下方法来解决: 减少模型复杂度:如果你的场景中有过多的高细节模型,可能会导致卡顿。尝试减少模型的复杂度,合并或简化多边形数量过多的模型。这将减轻计算机的负担&…

定制红酒:与客户的互动沟通,提升定制满意度

在云仓酒庄洒派,云仓酒庄洒派深知与客户之间的互动沟通对于提升定制满意度至关重要。因此,云仓酒庄洒派始终致力于与消费者建立积极、进一步的沟通,确保他们能够获得满意的红酒定制体验。 首先,云仓酒庄洒派通过多种渠道与客户建立…

扭蛋机小程序开发,互联网时代下的创新发展

近几年,扭蛋机市场迎来新生,逐渐火爆,受到了年轻一代消费者的钟爱。扭蛋机商品价格低廉,种类丰富,根据IP能够不断进行创新,收藏价值极高。在市场的发展下,扭蛋机行业也成为了一个蓝海市场&#…

算法打卡day12|二叉树篇01|144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

二叉树理论基础篇 二叉树的定义 二叉树的定义和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针,一共有两个指针,指向左右孩子。 JAVA的定义如下,需要理解性记忆,因为面试手撕代码可能会用。 p…

VBA中类的解读及应用第十讲:限制文本框的输入,使其只能输入数值(上)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。 类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

10大AI工具

ChatGPT ChatGPT是由OpenAI开发的人工智能聊天机器人程序,全称为Chat Generative Pre-trained Transformer。它基于GPT-3.5架构,能够生成回答并根据聊天上下文进行互动。ChatGPT具备强大的对话能力,能在同一会话中回答上下文相关的问题&…

SpringCloud之Nacos入门与实战系列

目录 一、Nacos介绍 1.1、配置中心和注册中心的概念 1.2 Nacos 优点 二、Nacos的使用 2.1 以单机模式启动Nacos 2.2 Nacos部署方式介绍 2.3 配置数据源 2.4 开启控制台权限登录 三、配置中心的使用 3.1 创建配置信息 3.2 SpringBoot使用配置中心 四、注册中心的使用 4…

知识管理系统:初创企业的智慧助手

一、什么是知识管理系统 用通俗易懂的语言来解释,知识管理系统就像一个超级大脑,帮助企业和团队更好地记住、分享和使用他们学到的东西。无论是工作中的经验、方案还是项目成果,这个系统都能帮大家保存下来,并方便以后查找和使用。…

程序如何知道mqtt设备是否在线

在做物联网设备的时候经常会碰到设备的在线与掉线 问题:emqx如何来实现这个在线与掉线 实现:添加一个规则,程序监控这个规则 1、SELECT * FROM "$events/client_connected", "$events/client_disconnected" 2、添加一…

全面认识计算机

目录 一、计算机的发展史 1. 电子管计算机时代 2. 晶体管计算机时代 3. 小、中规模集成电路计算机时代 4. 大、超大规模集成电路计算机时代 二、计算机硬件组成 1. 输入设备 2. 输出设备 3. 存储器 4. 运算器 5. 控制器 三、计算机硬件间的连接 四、计算机系统的结…

AlpacaEval Leaderboard大模型排行榜

参考 Model NameWin RateLengthGPT-4 Turbo 📄50.00%2049Contextual AI (KTO-Mistral-PairRM) 📄33.23%2521Yi 34B Chat 📄29.66%2123Claude 3 Opus (02/29) 📄29.04%1388Claude 3 Sonnet (02/29) 📄25.56%1420GPT-4 …

数睿通2.0数据接入升级——支持增量字段同步,表单独映射

引言 上次数睿通 2.0 更新是在 23 年12 月 底,已经过去了接近三个月的时间,中间由于过年加上年前年后实在是工作繁忙,所以一直没有腾出空来更新代码,希望大家可以理解,平台的发展离不开你们的支持,在此表示…

Seata 2.x 系列【4】产品简介

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Seata 版本 2.0.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 发展历史3. 核心术语3.1 TC3.2 TM3.3 RM 4.…