python编程(2)之灯光秀的按钮
今天小编带领大家开始学习python编程的第二节,灯关秀的按钮。 按键在后续的学习和开发过程中,都是很重要的内容,是帮助我们获取外界信息的基础通道,识别按键的方式,在上节的内容给大家介绍了,大家可以进行学习:智能硬件(7)之按键的布局与识别-CSDN博客
通过上节课图形化编程(2)之甜蜜的按钮-CSDN博客,我们学习了按键检测方式之一的事件方法,可以监听按键是否被按下了。那么这节我们就来学习按键检测方式的另一种,按键扫描法。
一、项目实战
1.1、功能分析和电路接线
通过按键1和按键2来实现控制小灯亮灭效果,当按键1被按下时点亮小灯、当按键2按下时熄灭小灯。按键模块和指示灯模块可以参考之前学习的章节了解:智能电路(2)之按键模块-CSDN博客和智能电路(1)之指示灯模块-CSDN博客
1.1.1、扩展板介绍:
下面是小编专门为esp32c3核心板,画的一块扩展板,提供的功能还是比较丰富的,支持2812彩灯、无源蜂鸣器、两路直流电机或者一个四线制步进电机、舵机功能、引出了I2C总线,支持扩展电源供电、有过流保护。

其中红色端子都是电源线,分为5V和3V;黑色端子都是地线;黄色端子都是信号线。
1.1.2、电路接线:
①将按键模块的GD和3V接在扩展板的任意GD和3V引脚上、K1和K2分别接在扩展版的2、3引脚上
②将指示灯模块的GD接在扩展版的任意GD引脚上,L1接在扩展版的10引脚上
1.2、代码分析和实验效果
1.2.1、事件触发方式
事件触发方式,主要利用主控板自带的中断功能,实现。通过配置引脚为下降沿触发方式,按键被按下时,就会触发物理中断,进入中断处理函数中,因为存在抖动,需要增加一个延时,一般是10-20ms,执行小灯的亮灭
from machine import Pin# 导入Pin模块
import time# 导入time模块#定义按键控制对象
key1=Pin(25, Pin.IN, Pin.PULL_UP)
key2=Pin(26, Pin.IN, Pin.PULL_UP)
led1=Pin(10, Pin.OUT)#按键1外部中断函数
def key1_irq(key1):time.sleep_ms(20) #按键消抖if key1.value()==0:print("K1按键被按下")led1.on()#按键2外部中断函数
def key2_irq(key2):time.sleep_ms(20) #按键消抖if key2.value()==0:print("K2按键被按下")led1.off()#程序入口
if __name__=="__main__":key1.irq(key1_irq,Pin.IRQ_FALLING)#配置key1外部中断,下降沿触发key2.irq(key2_irq,Pin.IRQ_FALLING)#配置key2外部中断,下降沿触发
1.2.2、按键扫描方式
from machine import Pin# 导入Pin模块
import time# 导入time模块#定义按键控制对象
key1=Pin(25, Pin.IN, Pin.PULL_UP)
key2=Pin(26, Pin.IN, Pin.PULL_UP)
led1=Pin(10, Pin.OUT)#程序入口
if __name__=="__main__":#循环while True:if key1.value()==0time.sleep_ms(20) #按键消抖if key1.value()==0print("K1按键被按下")led1.on()elif key2.value()==0time.sleep_ms(20) #按键消抖if key2.value()==0print("K2按键被按下")led1.off()
按键按下时因为纯在抖动,也会出现重复误判多次按下,所以需要增加一个延时,来去掉抖动的过程。最后通过在一个循环中重复的判断哪个按键被按下了,在执行指定的程序。
来看下实际运行效果:

1.3、两种按键触发方式对比
中断方式:
①响应速度快,物理中断
②不干预主代码的运行,有按键按下,就触发中断,立马执行中断处理函数
③浪费有限的中断资源
扫描方式:
①节省了中断资源,通过软件实现
②会大大影响主程序的运行,特比是去抖的20ms延时,会照成主代码不能及时响应
实际开发中,根据项目需要自行选择
二、拓展
目前是通过两个按钮实现的一亮一暗小灯程序,同学们可以扩展下,如何实现通过两个按钮分别实现不同的小灯程序,比如按键1按下,显示流水灯效果;按键2按下,显示小灯闪烁效果。
相关文章:
python编程(2)之灯光秀的按钮
今天小编带领大家开始学习python编程的第二节,灯关秀的按钮。 按键在后续的学习和开发过程中,都是很重要的内容,是帮助我们获取外界信息的基础通道,识别按键的方式,在上节的内容给大家介绍了,大家可以进行学…...
pandas将dataframe列中的list转换为多列
在应用机器学习的过程中,很大一部分工作都是在做数据的处理,一个非常常见的场景就是将一个list序列的特征数据拆成多个单独的特征数据。 比如数据集如下所示: data [[John, 25, Male,[99,100,98]],[Emily, 22, Female,[97,99,98]],[Michae…...
小巧的Windows Memory Cleaner内存清理工具-释放内存,提升电脑的性能-供大家学习研究参考
软件介绍 Windows Memory Cleaner是一款非常不错的内存清理工具大小仅200KB,这款免费的 RAM 清理器使用本机 Windows 功能来清理内存区域,帮助用户释放内存,提升电脑的性能,有时程序不会释放分配的内存,从而使计算机变…...
STM32F072 CAN and USB
1 通用描述 1.1 STM8 MOSTek 6502 -> ST7 -> STM8 STM8型号单片机分为STM8A、STM8L、STM8S三个系列。 STM8A:汽车级应用 STM8L:超低功耗MCU STM8S:标准系列 1.2 STM32 - F1系列用的最多,最大工作频率72MHz - STM32固件库&am…...
卷积神经网络基础与补充
参考自 up主的b站链接:霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 https://blog.csdn.net/m0_37867091?typeblog CNN的历史发展: 这一点老师上课的时候也有讲到,BP的出现对CNN的发展至关重要 卷积的特性&#x…...
File Inclusion(Pikachu)
File Inclusion(local) 这里随便点击一个提交 观察url,显示是一个文件file1.php 可以直接通过url修改这个文件 找到自己的文件(本地文件)shell.php的路径写上去 就可以看到 File Inclusion(remote) 提交的是一个目标…...
【Redis刨析】知识图谱的构建与实现
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言引用构建过程Redis的知识图谱构建过程Redis介绍快的原因持久化 引用 对于编程的学习,过了初级阶段,我认为应该减少对视频的依赖&am…...
html学习笔记 标题、段落、换行、列表、超链接、图片、表格
<h1></h1> <p></p> <br>换行,不带线 <hr>换行,带线列表 类似↓ 2 1 无序列表 <ul><li></li><li></li><li></li> </ul>有序列表 <oi><li></l…...
汽车项目管理
项目节点: MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…...
Tg-5511cb: tcxo高稳定性+105℃高温
爱普生推的一款TG-5511CB是一种高稳定的TCXO温补晶体振荡器,频率范围十分广泛从 10mhz ~ 54mhz,它的电源电压只需要3.3V,无论是手机还是其他电子设备,都能轻松提供稳定的电力支持。频率/温度特性表现出色,0.28 10^6Ma…...
Linux 命令 ifconfig 全面解析!
ifconfig 是 network interfaces configuring 的缩写。 在 Linux 操作系统中,ifconfig 用于显示或配置网络设备的参数信息。 查看网卡信息 $ ifconfig # 显示激活状态(up 状态)的网卡信息 eth0 Link encap:Ethernet HWaddr 00:0c:29:75:8…...
00-Git 应用
Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具,也称之为代码版本控制工具,代码版本控制或管理的工具用的最多的: svn、 git。 SVN 是采用的 同步机制,即本地的代码版本和服务器的版本保持一致(提…...
安全运维是做什么的,主要工作内容是什么
安全运维,简称SecOps,是一种集成安全措施和流程到信息技术运维的实践。它的目的是确保在日常运维活动中,如网络管理、系统维护、软件更新等,均考虑并融入安全策略。安全运维的核心是实现安全和运维团队的密切协作,以快…...
nodejs+vue+ElementUi大学新生入学系统的设计与实现1hme0
采用B/S模式架构系统,开发简单,只需要连接网络即可登录本系统,不需要安装任何客户端。开发工具采用VSCode,前端采用VueElementUI,后端采用Node.js,数据库采用MySQL。 涉及的技术栈 1) 前台页面…...
Unity-序列化和反序列化
序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程。序列化最主要的用途就是传递对象和保存对象。 在Unity中保存和加载、prefab、scene、Inspector窗口、实例化预制体等都使用了序列化与反序列化。 1 可序列化类型 1> 自定义的具有Serial…...
如何将语音版大模型AI接入自己的项目里(语音ChatGPT)
如何将语音版大模型AI接入自己的项目里语音ChatGPT 一、语音版大模型AI二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例5、智能生成API代码 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、语音版大模型AI 基于阿里通义千问、百…...
鸿蒙列表,item组件封装传参问题?@ObjectLink 和@Observerd
鸿蒙列表渲染,封装内容组件,进行item传参会报错? class FoodClass {order_id: number 0food_name: string ""food_price: number 0food_count: number 0 }Entry Component struct Demo07 {State message: string Hello World…...
信号与线性系统翻转课堂笔记12——时域取样定理
信号与线性系统翻转课堂笔记12 The Flipped Classroom12 of Signals and Linear Systems 对应教材:《信号与线性系统分析(第五版)》高等教育出版社,吴大正著 一、要点 (1)了解信号取样的概念࿱…...
爬虫工作量由小到大的思维转变---<Scrapy异常的存放小探讨>
前言: 异常很正常,调试异常/日志异常/错误异常~ 但在爬虫的时候,写完代码--->运行后根本挡不住一些运行异常;于是,把异常写到了中间件~ 当然,这也没有错; 不过,其实可以直接这么设计一下... 正文: 参照一下中间件处理的异常 def process_exception(self, request, exc…...
7.串口通信uart编写思路及自定义协议
前言: 串口是很重要的,有许多模块通信接口就是串口,例如gps模块,蓝牙模块,wifi模块还有一些精度比较高的陀螺仪模块等等,所以学会了串口之后,这些听起来很牛批的模块都能够用起来了。此外&#…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
