2022年12月15日 星期四

Witty Cloud ESP8266 開發板測試 (三) : 按鈕開關

今天繼續測試 Witty Cloud 開發板上內建的按鈕開關, 本系列之前的文章參考 :


關於按鈕可參考之前的測試 :


此篇因為使用外接機械開關, 所以需處理彈跳問題, 但使用 Witty Cloud 的板載按鈕開關卻沒有此問題, 若外接按鈕出現彈跳亦可參考下列 Arduino 的解決辦法 :


Witty Cloud ESP8266 開發板的主板 (上方) 有內建一個按鈕開關, 位置就在 PCB 天線正下方, 已經接到 ESP8266 的 GPIO 4 接腳 :




讀取按鈕開關狀態必須先先呼叫建構函式 machine.Pin() 建立 Pin 物件, 由於 Witty Cloud 板載按鈕開關已經內建上拉電阻, 因此不需要呼叫 machine.Pin() 時不需要傳入第三參數 Pin.PULL_UP, 只要定義其為輸入腳即可 :

button=Pin(4, Pin.IN)

然後呼叫 Pin 物件的 value() 方法即可讀取按鈕狀態是 0 (按下) 還是 1 (放開). 下面範例是在無限迴圈中偵測按鈕狀態, 如果是按下狀態就點亮板載 LED (Pin 4, 輸出 0), 否則就熄滅它 (輸出 1) :


測試 1 : 按住按鈕時點亮 LED 放開時熄滅 [看原始碼  

from machine import Pin, ADC
import time

led=Pin(2, Pin.OUT)      
button=Pin(4, Pin.IN)
led.value(1)  # 預設熄滅 LED

while True:
    value=button.value()
    if value:              # 1=按鈕放開
        print("按鈕狀態 :", value)
        led.value(1)    # 熄滅 LED
    else:                    # 0=按鈕按下
        print("按鈕狀態 :", value)
        led.value(0)     # 點亮 LED

注意, Witty Cloud 板載按鈕按下時讀到的是 0, 放開是 1; LED 輸出 1 是熄滅, 輸出 0 是點亮. 此例按下時 LED 才亮, 放開就會熄掉. 

下面範例則是讓按鈕變成 toggle, 亦即按一下亮, 再按一下熄滅 :


測試 2 : 按一下按鈕點亮 LED 再按一下熄滅 (toggle) [看原始碼  

from machine import Pin, ADC
import time

led=Pin(2, Pin.OUT)
button=Pin(4, Pin.IN)
led.value(1)  # 預設熄滅 LED

while True:
    if not button.value():  # 按鈕按下
        led.value(not led.value())    # 原點亮就熄滅, 原熄滅就點亮
        while not button.value():     # 若還按住就不反應
            pass

此例是利用 led.value(not led.value()) 來達成 toggle 功能, 當然底下處理按鈕還按住情況的無限迴圈也是必要的, 否則會閃爍. 

沒有留言 :