今日目標
昨天我們實現了按壓按鈕點亮LED,但如果嘗試用按鈕來做「按一下開、再按一下關」的切換功能,會發現有時按一次燈會亂響或沒有反應,這是因為金屬按鈕在按下與放開瞬間會產生微秒級別的機械震動。
今天要學習改用內部拉高電阻,並在程式碼中加入除彈跳邏輯,達成穩定且精確的按鈕開關切換。
程式碼
import time
from machine import Pin
led = Pin(2, Pin.OUT)
button = Pin(4, Pin.IN, Pin.PULL_UP)
led_state = False
last_btn_state = 1
print("除彈跳按鈕開關系統啟動!按一次切換狀態…")
while True:
current_btn_state = button.value()
if last_btn_state == 1 and current_btn_state == 0:
time.sleep_ms(20)
if button.value() == 0:
led_state = not led_state
led_value(led_state)
print(f"【按鈕觸發】切換LED狀態為:{'亮'if led_state else'滅'}")
while button.value() == 0:
time.sleep_ms(10)
last_btn_state = current_btn_state
time.sleep_ms(10)
心得
今天解決了物聯網硬體開發中最常見的按鍵彈跳問題,學會利用軟體延遲(time.sleep_ms(20))來過濾機械接點的雜訊,同時也掌握了內部拉高電阻的使用方式,這樣硬體電路就不用額外外接電阻。