今天繼續測試 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 功能, 當然底下處理按鈕還按住情況的無限迴圈也是必要的, 否則會閃爍.
沒有留言 :
張貼留言