GPIO - 使用 GPIO Interrupt 控制 LED
材料準備
AmebaD [AMB21 / AMB22 / AMB23 / BW16] x 1
LED x 1
Button x 1
範例説明
這個範例裡,我們使用按鈕與LED。一開始LED是亮的,當我們按下按鈕並放開之後,LED變暗。再按下按鈕之後,LED變亮。相比較於Arduino的入門的範例 “按鈕與LED”,不一樣的地方是,Arduino的範例是按著按鈕,LED才亮著,放開按鈕,LED才熄滅。
Open the example, “Files” → “Examples” → “AmebaGPIO” →
“LED_InterruptCtrl”
AMB21 / AMB22 接線的方式如下
AMB23 接線的方式如下
BW16 接線的方式如下
BW16-TypeC Wiring Diagram:
編譯程式並上傳到Ameba完成之後,按下Reset按鈕。
一開始LED是亮的,當我們按下Pin 12的按鈕並放開,LED變暗,再按一次,LED變亮
程式碼説明
在
setup()
裡面我們將Pin 12的按鈕設定成
INPUT_IRQ_RISE
,代表當這根pin的電壓遇到GND變成3V3的情況會觸發Interrupt。所以我們將按鈕一端接在3V3,按下按鈕時3V3會連通而觸發interrupt。
pinMode(button, INPUT_IRQ_RISE);
我們也可以設定成
INPUT_IRQ_FALL
,代表遇到pin的電壓遇到3V3變成GND會觸發Interrupt。這種情況裡,按鈕另一端通常會接在GND設定完pin mode之後,再設定要處理interrupt的function:
digitalSetIrqHandler(button, button_handler);
其中第二個參數是function pointer,它的prototype是:
void button_handler(uint32_t id, uint32_t event)
所以我們在這個handler裡面處理interrupt,每按一次按鈕(並放開)會觸發一次中斷,我們就改變LED狀態。