GPIO - Interrupt控制LED

材料準備

範例說明

這個範例裡,我們使用按鈕與LED。一開始LED是亮的,當我們按下按鈕並放開之後,LED變暗。再按下按鈕之後,LED變亮。
相比較於Arduino的入門的範例 “Button and LED”,不一樣的地方是,Arduino的範例是按著按鈕,LED才亮著,放開按鈕,LED才熄滅。

打開範例程式,”File” -> “Example” -> “AmebaGPIO” -> “Interrupt_Ctrl_LED”

1

由於 AmebaPro2 [AMB82 MINI] 上沒有內置按鈕,您可以選擇將黃色標記的代碼更改為任何 GPIO 引腳號。 在此示例中,使用了 GPIO 引腳 0。

1

AMB82 MINI 接線圖:

1

按Ameba上的reset按鈕來編譯並上傳程序。
LED 將首先亮起。 按下並釋放按鈕,然後 LED 應變暗。 再次按下按鈕,LED 應亮起。

程式碼說明

setup()

將上例中GPIO引腳設定成

INPUT_IRQ_RISE

,這意味著當該引腳的電壓從 GND 變為 3V3 時發生中斷。 因此,我們將按鈕的另一端連接到3V3,以便在按下按鈕時觸發中斷事件。

pinMode(button, INPUT_IRQ_RISE);

另外,我們可以將上例中GPIO設置為

INPUT_IRQ_FALL

,這意味著當該引腳的電壓從 3V3 變為 GND 時發生中斷。 在這種情況下,按鈕的另一側連接到 GND。 接下來,我們需要指定要執行的函數來處理中斷:

digitalSetIrqHandler(button, button_handler);

第二個參數是一個function pointer

void button_handler(uint32_t id, uint32_t event)

在這個處理程序中,每次按下和釋放按鈕時,都會觸發一個中斷,並改變 LED 的狀態。

請先確認已安裝QQ通訊軟體