Raspberry Pi Pico 按鈕的使用

如果我們需要讓Pico / Pico W 可以透過按鈕和使用者互動,也就是在接上按鈕之後,可以在程式中偵測到按鈕的狀態,只要找到一個簡易型的按鈕,然後把按鈕一端接到GPIO的任一腳,另外一端接地,就可以寫出按鈕偵測的程式查詢目前按鈕是否被按下去。

我們這次使用的按鈕是以下這種:

這個例子使用了兩個按鈕,分別接到GP18和GP19,也就是實際接腳的第24和第25的位置。連接完成之後,可以使用以下的程式碼來檢查是否可以順利偵測(以下的程式碼是在Pico上執行的,如果你用的是Pico W的話,請把 led = Pin(25, Pin.OUT)這行改為 led = Pin(“LED”, Pin.OUT):

from machine import Pin

btn1 = Pin(18, Pin.IN, Pin.PULL_UP)
led = Pin(25, Pin.OUT)

while True:
    if btn1.value():
        led.off()
    else:
        led.on()

上述的程式會讓你在按下按鈕的時候點亮板子上的預設LED,放開按鈕的時候該LED就會熄滅。

假設我們想要利用兩顆按鈕來進行計數器的加減,按左邊按鈕時把計數器加1,按右邊按鈕時則把計數器減1,第一個想法是製作以下的程式:

from machine import Pin
import time

btn1 = Pin(18, Pin.IN, Pin.PULL_UP)
btn2 = Pin(19, Pin.IN, Pin.PULL_UP)

counter = 0
while True:
    if btn1.value()==0:
        counter += 1
        print(counter)
    elif btn2.value()==0:
        counter -= 1
        print(counter)
    time.sleep_ms(100)

上述程式在執行時大致上可行,但是由於按鈕在按下時會有彈跳的現象,而且按下去到離開的時間不一定,所以有時候可能會被多加1或多減了1,在計數上並不太確實。此種情況可以利用以下的程式來解決,也就是當按鈕按下去之後,我們還要多一個偵測的動作,一直到按鈕被放開時才加1或減1。

結合之前文章中介紹的SSD1306微型顯示器的功能,以下的程式把計數器的內容顯示在顯示器的正中央位置,程式碼如下:

from machine import Pin, I2C
import ssd1306, time

i2c = I2C(0, sda=Pin(16), scl=Pin(17))
disp = ssd1306.SSD1306_I2C(128, 64, i2c)

btn1 = Pin(18, Pin.IN, Pin.PULL_UP)
btn2 = Pin(19, Pin.IN, Pin.PULL_UP)

count = 0
while True:
    if btn1.value() == 0:
        while btn1.value()==0:
            pass
        count -= 1
    elif btn2.value() == 0:
        while btn2.value()==0:
            pass
        count += 1
    disp.fill(0)
    disp.text(str(count), 62, 32)
    disp.show()

利用上述的程式,就可以很明確地判斷按鈕是否完成了按下且釋放的動作,只有完成了這兩個動作之後,才會進行計數器計數以及顯示的功能。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *