iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
自我挑戰組

無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務系列 第 6 篇

解決按鍵彈跳問題,內部拉高電阻與除彈跳邏輯

  • 分享至 

  • xImage
  •  

今日目標
昨天我們實現了按壓按鈕點亮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))來過濾機械接點的雜訊,同時也掌握了內部拉高電阻的使用方式,這樣硬體電路就不用額外外接電阻。


上一篇
連接開關按鈕控制LED啟閉
下一篇
用irq()實現按鍵即時響應
系列文
無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言