學會了前一篇的事件驅動程式設計方法之後,接下來可以製作一個簡單的切換燈光的應用,也就是一開始啟動的時候燈光是全熄滅的,而當按下按鈕時,燈光會開啟,但是再按一下的時候,燈光則又熄滅。
為了完成這樣的動作,首先要有一個變數用來記錄目前燈光的狀態,我們利用light_on這個變數來記錄,一開始的時候light_on要設為False,同時把燈也熄滅,當按下按鈕的時候,要先檢查此變數的狀態,再決定是要開燈還是關燈,程式設計如下:
import halo, event
light_on = False
@event.start
def on_start():
global light_on
light_on = False
halo.led.off_all()
@event.button_pressed
def on_button_pressed():
global light_on
if light_on:
light_on = False
halo.led.off_all()
else:
light_on = True
halo.led.show_all(25, 25, 25)
在這裡我們使用了2個事件,分別是光環板啟動的事件以及按鈕按下去的事件。光環板啟動之後,會執行on_start()函數,它負責把light_on這個變數設為False,並把所有的燈光都關閉。有一點要特別留意的是,因為light_on這個變數是放在函數的外面,它是屬於全域變數,因此在函數中使用之前,一定要先以global light_on這條敘述,明確地指出要存取的是外面的那個全域變數,如此在兩個不同的函數才會操作到同一個變數。
在按鈕事件中,我們先檢查light_on的狀態,才能夠決定要把燈打開或是關閉,所以這個變數是整個程式中最關鍵的部份。