按键是最基本的输入设备,用于检测用户的按下动作。
[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
GP14GNDPin.PULL_UP),不需要外接电阻# ============ 接线 ============
# 按键一脚 → Pico GP14
# 按键另一脚 → Pico GND
# 用 Pico 内部上拉:松开读到 1,按下读到 0,无需外接电阻
# =============================
from machine import Pin
import time
key = Pin(14, Pin.IN, Pin.PULL_UP) # 内部上拉
print('开始检测按键...')
while True:
if key.value() == 0: # 按键按下(接通到 GND)
print('按键被按下!')
while key.value() == 0: # 等按键松开
pass
print('按键被释放')
time.sleep_ms(50) # 简单防抖
# ============ 接线 ============
# 按键一脚 → Pico GP14
# 按键另一脚 → Pico GND(内部上拉,无需外接电阻)
# =============================
from machine import Pin
import time
key = Pin(14, Pin.IN, Pin.PULL_UP)
key_state = 1
last_key_state = 1
time_last = 0
de_bounce_time = 50 # 防抖时间(毫秒)
print('带防抖的按键检测')
while True:
current_time = time.ticks_ms()
current_state = key.value()
# 状态变化且超过防抖时间才算是一次有效动作
if current_state != last_key_state and time.ticks_diff(current_time, time_last) > de_bounce_time:
if current_state == 0:
print('按键按下')
else:
print('按键释放')
time_last = current_time
last_key_state = current_state
time.sleep_ms(10)
# ============ 接线 ============
# 按键一脚 → Pico GP14
# 按键另一脚 → Pico GND(内部上拉,无需外接电阻)
# =============================
from machine import Pin
import time
key = Pin(14, Pin.IN, Pin.PULL_UP)
# 中断回调函数:按键按下(下降沿)时自动被调用
def key_handler(pin):
print('按键中断触发:按键被按下')
# 注意:中断里尽量别做耗时操作,也别在这里用 input()/print 太频繁
# 下降沿触发(按下瞬间从高电平变低电平)
key.irq(trigger=Pin.IRQ_FALLING, handler=key_handler)
print('中断模式,按下按键测试')
while True:
time.sleep(1) # 主循环可以去做别的事,按键按下时中断会通知
print('主循环运行中...')
Pin(14, Pin.IN, Pin.PULL_UP) 不开上拉,松开时引脚悬空,读数会乱跳time.sleep_ms(50) 去抖;更稳用进阶示例的防抖法Pin() 即可Q: 按键检测不稳定、偶尔多触发怎么办? A: 加 Software 防抖(见进阶示例),或硬件上在按键两端并一个 0.1µF 电容滤波。
Q: 按键按下后程序没反应?
A: 检查两脚有没有接反(一脚 GPIO、一脚 GND),并确认用了 Pin.PULL_UP。
Q: 怎么实现长按 / 双击?
A: 长按:记下 key.value()==0 的起始时刻,松开时比较时长。双击:两次短按间隔小于设定值算双击。