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()==0
time.sleep_ms(20) #按键消抖
if key1.value()==0
print("K1按键被按下")
led1.on()
elif key2.value()==0
time.sleep_ms(20) #按键消抖
if key2.value()==0
print("K2按键被按下")
led1.off()
????????按键按下时因为纯在抖动,也会出现重复误判多次按下,所以需要增加一个延时,来去掉抖动的过程。最后通过在一个循环中重复的判断哪个按键被按下了,在执行指定的程序。
来看下实际运行效果:
1.3、两种按键触发方式对比
中断方式:
①响应速度快,物理中断
②不干预主代码的运行,有按键按下,就触发中断,立马执行中断处理函数
③浪费有限的中断资源
扫描方式:
①节省了中断资源,通过软件实现
②会大大影响主程序的运行,特比是去抖的20ms延时,会照成主代码不能及时响应
? ? ? ? 实际开发中,根据项目需要自行选择
二、拓展
? ? ? ? 目前是通过两个按钮实现的一亮一暗小灯程序,同学们可以扩展下,如何实现通过两个按钮分别实现不同的小灯程序,比如按键1按下,显示流水灯效果;按键2按下,显示小灯闪烁效果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!