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

news2024/11/18 6:36:52

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目解决方案:多地5G蓄能电站的视频监控联网系统设计方案

目 录 一、前言 二、系统架构设计 1、系统架构设计说明 2、系统拓扑图 三、关键技术 1. 5G支持技术 2. 视频图像处理技术 3. 数据融合与分析技术 四、功能特点 1. 高效可靠 2. 实时监测 3. 远程控制 4. 故障预测 五、应用前景 一、前言 随着能源…

Unity类银河恶魔城学习记录9-2 P83 Explosive crystal源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Crystal_Skill_Controller using System.Collections; using System.Colle…

Apache服务的搭建与配置

一、apache安装 systemctl stop firewalldsystemctl disable firewalldsetenforce 0yum -y install httpdsystemctl start httpdnetstat -ntlp | grep 80 二、认识主配置文件 # vim /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" #定义工作目…

如何优雅地处理Web应用中的大文件上传

处理和上传大文件是Web开发中的常见挑战。一方面,我们需要确保应用的性能和响应性不被影响;另一方面,还要保证数据的安全性和完整性。接下来,我们将逐步探讨如何使用文件分片、Web Workers和SHA-256散列计算来解决这些问题。 问题…

数据结构---复杂度(1)

1.时间复杂度 衡量算法的好坏,使用大写的o来表示时间复杂度,通俗的讲,就是一个算法执行的次数; 时间复杂度就是数学里面的函数表达式;本质上是一个函数; 下面举几个例子: (1)这里的执行次数是…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(二)-向量元素到向量寄存器状态的映射

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

测试人员需要掌握的 k8s 知识

前言 kubernetes 在容器编排领域已经形成统治地位,不管是开发、运维还是测试,掌握 kubernetes 都变得非常有必要。这篇文章通过 minikube 搭建一个简单的 kubernetes 运行环境。 安装虚拟机 主流的操作系统都支持 kubernetes,但是 windows…

禁止使用搜索引擎,你了解吗?

员工A:“我今天想搜索的时候,用不了浏览器了,你能用么?” 员工B:“不知道啊我试一下啊” “也不行” 员工C:“为什么啊?” 针对上述对话,我们不禁思考: 公司为什么禁…

一代影后阮玲玉:国际妇女节这天自杀,让很多人都感到震惊和惋惜!

一代影后阮玲玉:国际妇女节这天自杀,让很多人都感到震惊和惋惜! 说起阮玲玉,那可真是咱们中国电影史上的一位大明星啊。#李秘书讲写作# 今日说起她演过的电影和成就,嘿,说出来可都是响当当的。 阮玲玉,原名…

算法刷题day25:多路归并

目录 引言概念一、鱼塘钓鱼二、技能升级三、序列 引言 关于这个多路并归蓝桥杯考的不是很多,如果要出的话,可能模型都会差不多,因为不会出太难的题,难题基本上都是贪心、DP之类的,所以好好刷题刷熟练就行了&#xff0…

探讨2024年AI辅助研发的趋势

一、引言 随着科技的飞速发展,人工智能(AI)已经成为当今时代最具变革性的技术之一。AI的广泛应用正在重塑各行各业,其中,AI辅助研发作为科技和工业领域的一大创新热点,正引领着研发模式的深刻变革。从医药…

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…

帮管客 CRM jiliyu SQL注入漏洞复现

0x01 产品简介 帮管客CRM是一款集客户档案、销售记录、业务往来等功能于一体的客户管理系统。帮管客CRM客户管理系统,客户管理,从未如此简单,一个平台满足企业全方位的销售跟进、智能化服务管理、高效的沟通协同、图表化数据分析帮管客颠覆传统,重新定义企业管理系统。 …

Redis核心数据结构之字典(二)

字典 解决键冲突 当有两个或以上数量的键被分配到了一个哈希表数组的同一个索引上面,我们称这些键发生了冲突(collision)。 Redis的哈希表使用链地址法(separate chaining)来解决键冲突,每个哈希表节点都有一个next指针,多个哈希表节点可以…

python三剑客之一——Numpy

温故而知新,借着工作需要用到Numpy的机会重新学习一遍Numpy。 Numpy是一个运行速度非常快的数学库,主要用于数组计算,包含如下: 一个强大的N维数组对象ndarray【Nd(Dimension维度)array】 广播功能函数 整…

九型人格测试,9号和平型人格的职业分析业?

九型人格测试,人格分为9个类型,而和平型人格,也就是我们所说的和平使者,为人非常善良,十分地体贴,能够体谅到对方的难处,并且会大度地原谅对方的错误。愿意去了解对方,但却没有时间在…

支小蜜校园防欺凌系统听到声音之后会自动识别吗

在校园安全领域,特别是在预防和应对欺凌问题上,校园防欺凌系统作为新兴的技术应用,正在受到越来越多的关注和探索。那么当这样的系统听到声音之后,它是否能够自动识别并作出相应反应呢?本文将围绕这一问题展开探讨。 …

JAVA虚拟机实战篇之内存调优[4](内存溢出问题案例)

文章目录 版权声明修复问题内存溢出问题分类 分页查询文章接口的内存溢出问题背景解决思路问题根源解决思路 Mybatis导致的内存溢出问题背景问题根源解决思路 导出大文件内存溢出问题背景问题根源解决思路 ThreadLocal占用大量内存问题背景问题根源解决思路 文章内容审核接口的…

编译内核错误 multiple definition of `yylloc‘

编译内核错误 # make ARCHarm CROSS_COMPILEarm-mix410-linux- uImageHOSTLD scripts/dtc/dtc /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss0x10): multiple definition of yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss0x0): first defined here collect2: error: ld ret…

c++提高部分

c++提高部分 这部分主要涉及泛型编程和STL技术 1. 模版 1.1 模版的概念 模版就是通用的模具,大大提高复用性,但需要根据需求改动一些东西 1.2 函数模版 c++另一种编程思想为泛型编程,主要利用的技术就是模版c++提供两种模版机制:函数模板和类模板1.2.1 函数模板语法 …