GPIO - 使用GPIO Interrupt控制LED

材料準備

範例說明

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

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

AMB21/ AMB22 接線如下圖:

1

AMB23 接線如下圖:

1

BW16 接線如下圖:

1

Compile and upload the program, press the reset button on the Ameba.
The LED will light up at first. Press and release the button, then the LED should dim. Press the button again the LED should light up.

程式碼說明

setup()

將引腳 12設定成

INPUT_IRQ_RISE

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

pinMode(button, INPUT_IRQ_RISE);

另外,我們可以將引腳 12 設置為

INPUT_IRQ_FALL

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

digitalSetIrqHandler(button, button_handler);

第二個參數是一個function pointer

void button_handler(uint32_t id, uint32_t event)

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

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