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