Micro:bit 與按壓碰觸有關的設計

在許多搭配電子儀器的玩具上常有一種功能,就是在玩具上按下一個按鈕就會觸發一些聲響音樂或是閃光,這件事在Micro:bit 上也是很容易讓我們學習到如何利用程式來控制這些按壓(或碰觸)所對應的反應。

在Micro:bit 上內建三個button,背面的是 reset 鍵,正面有兩個按鍵,左邊為A 鍵,右邊為B 鍵。要觸發A 鍵的按壓事件是透過button_a 來完成,常用的函數有button_a.is_pressed() ,顧名思義是傳回A 鍵是否被按壓。另外一個是button_a.get_presses(),顧名思義是A 鍵被壓了幾次。我們可以很容易透過這兩個函數,設計AB鍵被按壓的狀態,當然也有利用AB鍵同時被壓著來觸動的事件。例如,button_a.is_pressed() and button_b.is_pressed()。範例程式如下:

 

from microbit import *

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        display.show(Image.HAPPY)
    elif button_b.is_pressed():
        display.show(Image.HEART)
    elif button_a.is_pressed():
        display.show(Image.GHOST)
    else:
        display.show(Image.SAD)

這個例子是當AB鍵同時按壓時會顯示Image.HAPPY 的符號,只有B鍵被按壓時顯示Image.HEART 符號,只有A鍵單獨被按壓時顯示Image.GHOST 符號,都不按壓時顯示Image.SAD符號。這裡要特別小心的是,AB鍵同時被按壓最好放在if 敘述的第一行,因為硬體感應的敏感度是比人的感覺還快速的,這樣所顯示的結果才會和預期的相同。

除了按鍵之外,我們還可以使用Micro:bit 下面的三個pin 腳來設計與碰觸有關的觸發。範例程式如下:

from microbit import *

while True:
    if pin0.is_touched():
        display.show(Image.HAPPY)
    elif pin1.is_touched():
        display.show(Image.HEART)
    else:
        display.show(Image.SAD)

 

當我們把Pin0 接出一條導線,同時也從GND 接出一條導線,若這兩條導線很靠近並且讓人體接觸到成為一個通路時,就能觸發pin0.is_touched()。與按鍵不同的地方是這裡只要碰到形成通路就行了,因此可以設計成被碰觸事件的觸發。如果沒有導線,我們直接用一隻手指壓住Pin0,另外一隻手指壓住GND 也會有同樣的效果。