GPIO - 使用GPIO Interrupt控制LED

材料准备

范例说明

介绍

这个范例里,我们使用按钮与LED。一开始LED是亮的,当我们按下按钮并放开之后,LED变暗。再按下按钮之后,LED变亮。
相比较于Arduino的入门的范例 “Button and LED”,不一样的地方是,Arduino的范例是按着按钮,LED才亮着,放开按钮,LED才熄灭。

流程

打开范例程式,”File” -> “Examples” -> “AmebaGPIO” -> “LED_InterruptCtrl”

按Ameba上的reset按钮来编译并上传程序。
LED 将首先亮起。按下并释放按钮,然后 LED 应变暗。再次按下按钮,LED 应亮起。

程式码说明

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通讯软体