按键
python
LED = Pin(46, Pin.OUT) # 构建 LED 对象,开始熄灭
KEY = Pin(0, Pin.IN, Pin.PULL_UP) # 构建 KEY 对象
使用Pin
类创建了一个名为LED
的对象,将引脚号46指定为LED的控制引脚,并将其配置为输出模式。另外,还创建了一个名为KEY
的对象,将引脚号0指定为按键的引脚,并将其配置为输入模式,同时启用上拉电阻。当按键松开时,KEY.value()
的返回值为1。
python
from machine import Pin
import time
LED = Pin(46, Pin.OUT) # 构建 LED 对象,开始熄灭
KEY = Pin(0, Pin.IN, Pin.PULL_UP) # 构建 KEY 对象
state = 0 # LED 引脚状态
while True:
if KEY.value() == 0: # 按键被按下
time.sleep_ms(10) # 消除抖动
if KEY.value() == 0: # 确认按键被按下
state = not state # 使用 not 语句而非~语句
LED.value(state) # LED 状态翻转
print('KEY')
while not KEY.value(): # 检测按键是否松开
pass
上拉电阻(Pull-up resistor)
是一种常用的电路元件,用于将一个引脚(通常是输入引脚)连接到高电平(通常是电源电压)。
当一个引脚被配置为输入模式时,如果不连接上拉电阻,这个引脚就会变得容易受到外部干扰,因为它没有确定的电平状态。此时,引脚可能会出现浮动状态(floating),即既不是逻辑高电平(1)也不是逻辑低电平(0),其电压可能会受到周围环境的影响而变化。
外部中断
python
from machine import Pin
import time
LED = Pin(46, Pin.OUT) # 创建LED对象,初始状态为熄灭
KEY = Pin(0, Pin.IN, Pin.PULL_UP) # 创建KEY对象
state = 0 # LED引脚状态
# LED状态翻转函数
def fun(KEY):
global state
time.sleep_ms(10) # 消除按键抖动
if KEY.value() == 0: # 确认按键被按下
state = not state
LED.value(state)
KEY.irq(fun, Pin.IRQ_FALLING) # 定义中断,下降沿触发
KEY.irq(fun(KEY), Pin.IRQ_FALLING)
这样的写法是不正确的,因为它实际上会直接调用 fun(KEY)
函数,并将其返回值作为回调函数传递给 irq()
方法。
在设置中断时,我们需要传递回调函数的名称,而不是调用函数。这样,当中断触发时,才会自动调用回调函数。
当设置中断时,irq()
方法会自动管理中断触发和回调函数的调用。无需显式地传递参数给回调函数,它们将在触发中断时自动传递。在这个例子中,回调函数 fun
将自动接收触发中断的引脚对象作为参数。