4. 按键点灯
4.1 独立按键基础知识
独立按键是一种简单的输入设备,广泛应用于各种电子设备中,用于实现基本的用户交互。它们的工作原理通常基于一个简单的机械开关,当按下按键时触发某些操作。独立按键可以有多种尺寸、形状和颜色,便于用户辨识和使用。
独立按键是一种简单的输入设备,广泛应用于各种电子设备中,用于实现基本的用户交互。它们的工作原理通常基于一个简单的机械开关,当按下按键时触发某些操作。独立按键可以有多种尺寸、形状和颜色,便于用户辨识和使用。
4.2 独立按键结构组成
独立按键的主要结构组成包括:按钮、外壳、弹簧、触点、导电片和引脚。由一个弹性体(如弹簧或金属片)和一个按键帽组成。当按键被用户按下时,弹性体会缩短,使按键帽压缩,使按钮顶部变得接近或触摸基底。当用户松开按钮时,弹性体恢复原状,按键返回初始位置。所以当按键未被按下时,通常触点是分开的,电路是断开的。当按下按键时,导电片触碰到触点,从而形成一个闭合电路。
4.3 独立按键驱动原理
独立按键驱动是为了让微控制器能识别按键的状态,而微控制器正好可以识别高电平和低电平,所以大多数的按键都是通过给按键的一端接入高电平,一端接入GPIO;或者是给按键的一端接入低电平,一端接入GPIO。通过检测连接按键的引脚有没有发生电平变化,就可以知道按键是否按下。
4.4 消抖措施
由于机械按键在闭合和分开时可能产生的机械振动(相当于弹簧),导致开关状态在短时间内多次变换,这就是按键抖动现象。消抖措施主要分为软件消抖和硬件消抖:
- 软件消抖:主要是通过编程的方法,设定一个延迟或计时器,确保在一定的时间内只读取一次按键状态,避免抖动对程序的影响。
- 硬件消抖:在按键电路中加入元器件如电阻、电容组成的RC低通滤波器,对按键信号进行平滑处理,降低抖动的影响。
4.5 独立按键原理图
开发板原理图中,将按键一端通过上拉电阻R14接到的3.3V的高电平和引脚GPIO0上,另一端接到了GND(低电平)。将开发板的按键电路简化,得到下图。
开发板一上电,GPIO0引脚就会因为R14这个上拉电阻变为高电平,所以当按键没有按下的时候,GPIO0引脚默认为高电平;当按键按下时,因为按键闭合,GPIO0通过按键接到了GND上,所以GPIO0变为了低电平;故我们在代码中,一直检测按键的电平状态,当检测到低电平时,说明按键有按下;当检测到高电平时,说明按键没有按下。
4.6 独立按键驱动流程
以下是一个简化的独立按键驱动流程:
- 导入接口类
from machine import Pin #机器硬件的接口类
之前点灯章节,是直接导入的 machine 类,导致后面使用其他功能时都要加上类的路径,比如想要初始化引脚:
classmachine.Pin(id, mode=- 1, pull=- 1, *, value, drive, alt)
而如果导入具体的类,比如machine 下的Pin。
from machine import Pin #机器硬件的接口类
在初始化引脚时,就可以这么写: Pin(id, mode=- 1, pull=- 1, *, value, drive, alt)
- 初始化微控制器的GPIO为输入功能
key_gpio = 0
#初始化 key_gpio 引脚为输入模式,开启上拉电阻
key_pin = machine.Pin(key_gpio, machine.Pin.IN, Pin.PULL_UP)
2
3
- 检测按键状态(定时轮询或中断触发) Pin.value(x)是 MricoPython 编程中用于从引脚读取电平状态或者设置引脚输出对应值的函数。当引脚设置为输入模式( Pin.IN )时,可以使用这个函数来读取引脚的当前电平状态。 Pin.value(x) 此方法允许设置 和 获取引脚的值,具体取决于x是否提供参数。 如果没有提供x参数,则此方法就可以获取引脚的数字逻辑电平,分别返回对应于低电平和高电平信号的 0 或 1。获取的值是否正确还取决于引脚的模式:
- Pin.IN - 当引脚为输入模式时,该方法返回引脚上当前存在的实际输入值,高电平或者低电平。
- Pin.OUT - 当引脚为输出模式时,该方法无效。
如果提供了 x 参数,则此方法就是设置引脚的数字逻辑电平输出。参数x可以是任何转换为布尔值的东西。如果转换为 True,则引脚设置为状态“1”,即输出高电平,否则设置为状态“0”,即输出低电平。需要注意,设置值时,此方法返回 None。
什么是定时轮询或中断触发?
- 定时轮询也叫顺序检测,它是一种扫描式的按键驱动方式,在一个循环的代码中循环的检测按键状态。当检测到按键闭合时,就进行相应操作。
- 中断触发主要利用微控制器的中断功能,当按键状态发生变化时,微控制器会立即响应,停止当前任务并执行按键响应程序。这种方式对实时性要求较高。
- 如有抖动现象,应用消抖措施
- 如有抖动现象,应用消抖措施 设定一个延迟,确保在一定的时间内只读取一次按键状态,过滤掉其中的抖动现象,避免抖动对程序的影响。
# 如果按键按下
if KEY.value()==0:
# 消抖
time.sleep_ms(10)
# 重新确定是否按下按键
if KEY.value()==0:
2
3
4
5
6
4.7 按键点灯验证
将开发板上板载的BOOT键连接的GPIO0初始化为输入模式,设计一个程序,使按下按键就让灯亮,再按就灯灭。
开发板上板载的BOOT键,只要不在上电的时候按下,就可以正常使用。
from machine import Pin
import time
# 初始化 GPIO48 引脚为输出模式
LED=Pin(48,Pin.OUT)
# 初始化 GPIO0 引脚为输入模式,使能上拉电阻
KEY=Pin(0,Pin.IN,Pin.PULL_UP)
# LED状态变量
state=0
while True:
# 如果按键按下
if KEY.value()==0:
# 消抖
time.sleep_ms(10)
# 重新确定是否按下按键
if KEY.value()==0:
# LED状态变量 取反
state=not state
# 切换LED状态
LED.value(state)
# 等待按键松开(如果一直为0则一直延时)
while not KEY.value():
time.sleep_ms(50)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
4.8 按键点灯效果
按下按键灯亮,再按下按键灯灭,如此反复。