如何实现按键触发仅打印一次并回到循环起始,同步LCD对应按键颜色
按键按下仅触发一次响应的解决方案
问题说明
需求:按下按键后,LCD屏幕显示对应颜色,程序仅打印一次按键触发信息。
当前问题:按键按下后,程序无限重复打印"ybutton ok"或"rbutton ok",添加continue无法解决。
问题原因
机械按键按下时,Pin.value()会持续返回True,主循环会反复执行print语句。必须检测按键按下的瞬间(边缘触发),或等待按键释放后再继续循环,才能实现单次触发。
方法1:检测按键释放(简易消抖)
思路:检测到按键按下后立即打印信息,然后等待按键释放,同时添加短延时处理机械按键的抖动问题,避免误触发。
修改后的代码:
from machine import Pin import time ybutton = Pin(14, Pin.IN, Pin.PULL_DOWN) rbutton = Pin(15, Pin.IN, Pin.PULL_DOWN) gbutton = Pin(13, Pin.IN, Pin.PULL_DOWN) while True: if ybutton.value(): print("ybutton ok") # 等待按键释放,同时消抖 while ybutton.value(): time.sleep_ms(10) elif rbutton.value(): print("rbutton ok") while rbutton.value(): time.sleep_ms(10) # 主循环添加短延时,降低CPU占用 time.sleep_ms(10)
方法2:使用外部中断(高效触发)
思路:利用GPIO中断功能,仅在按键按下的**上升沿(从释放到按下的瞬间)**触发一次回调函数,自带消抖配置,CPU占用更低。
修改后的代码:
from machine import Pin import time ybutton = Pin(14, Pin.IN, Pin.PULL_DOWN) rbutton = Pin(15, Pin.IN, Pin.PULL_DOWN) gbutton = Pin(13, Pin.IN, Pin.PULL_DOWN) # 按键回调函数,触发时执行 def ybutton_trigger(pin): print("ybutton ok") # 在此添加LCD显示黄色的代码 def rbutton_trigger(pin): print("rbutton ok") # 在此添加LCD显示红色的代码 # 配置中断:上升沿触发(按键按下),启用消抖 ybutton.irq(trigger=Pin.IRQ_RISING, handler=ybutton_trigger, hard=False) rbutton.irq(trigger=Pin.IRQ_RISING, handler=rbutton_trigger, hard=False) # 主循环保持程序运行 while True: time.sleep(1)
两种方法对比
- 方法1:代码直观,无需理解中断机制,适合简单项目;
- 方法2:响应速度更快,CPU占用低,适合需要处理多个事件的复杂场景。
内容的提问来源于stack exchange,提问作者rafael rébi
相关产品推荐
相关产品推荐

