GPIO - Interrupt控制LED
材料準備
- AmebaPro2 [ AMB82 MINI ] x 1
- Button x 1
範例說明
這個範例裡,我們使用按鈕與LED。一開始LED是亮的,當我們按下按鈕並放開之後,LED變暗。再按下按鈕之後,LED變亮。
相比較於Arduino的入門的範例 “Button and LED”,不一樣的地方是,Arduino的範例是按著按鈕,LED才亮著,放開按鈕,LED才熄滅。
打開範例程式,”File” -> “Example” -> “AmebaGPIO” -> “Interrupt_Ctrl_LED”
由於 AmebaPro2 [AMB82 MINI] 上沒有內置按鈕,您可以選擇將黃色標記的代碼更改為任何 GPIO 引腳號。 在此示例中,使用了 GPIO 引腳 0。
AMB82 MINI 接線圖:
按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 的狀態。
Copyrights ©瑞晟微电子(苏州)有限公司 2021. All rights reserved. Terms of Use