用料
示例
在本示例中,我们使用按钮触发中断并控制 LED。请注意,在 Arduino 示例 "Button and LED"中,只有在按住按钮时 LED 才会亮起,而当我们松开按钮时,LED 会变暗。
打开示例,"文件" -> "示例" -> "AmebaGPIO" -> "Interrupt_Ctrl_LED"。
由于[BW21-CBV-Kit] 没有内置按钮,您可以选择将黄色突出显示的代码更改为任何 GPIO 引脚编号。本例中使用的是 GPIO 引脚 0。
BW21-CBV-Kit 电路图:
编译并上传程序后,按下 BW21-CBV-Kit 上的复位按钮。LED 指示灯首先会亮起。按下并松开按钮,LED 指示灯会变暗。再次按下按钮,LED 亮起。
代码参考
在这个函数中:
setup()
我们将上例中的 GPIO 引脚设置为:
INPUT_IRQ_RISE
也就是说,当该引脚的电压从 GND 变为 3V3 时,就会发生中断。因此,我们将按钮的另一端连接到 3V3,以便在按下按钮时触发中断事件。
pinMode(button, INPUT_IRQ_RISE);
另一方面,我们可以将上例中的 GPIO 引脚设置为:
INPUT_IRQ_FALL
这意味着当该引脚的电压从 3V3 变为接地时会发生中断。在这种情况下,按钮的另一端连接到 GND。接下来,我们需要指定要执行的函数来处理中断:
digitalSetIrqHandler(button, button_handler);
第二个参数是一个函数指针,带有原型:
void button_handler(uint32_t id, uint32_t event)
在这个处理程序中,每次按下和松开按钮都会触发一个中断,并改变 LED 的状态。 |