python编程(2)之灯光秀的按钮

发布时间:2023年12月25日

????????今天小编带领大家开始学习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按下,显示小灯闪烁效果。

文章来源:https://blog.csdn.net/qmmaker45/article/details/135147872
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。