Arduino: 在 bpibit 上使用 GPIO 外部中断 (4)

外部中断是单片机实时地处理外部事件的一种内部机制。当外部事件发生后,单片机判断外部事件是否符合条件,如果符合外部中断条件,则停止CPU正在执行的程序,转而进行中断事件的处理;中断处理完毕后,又返回被中断的程序处,继续执行。

目的

熟悉 ESP32 外部中断,利用外部中断实现通过按钮控制 LED 的亮灭

配套介绍

编写工具: vscode + platformIO 安装教程

硬件: bpibit

主要函数

  • attachInterrupt(pin, intRoutine, mode)
    这个函数主要用于建立外部中断
参数 功能
pin 外部事件对应的引脚
intRoutine 处理外部事件的函数名
mode 中断模式

内置在 arduino 的中断模式有以下种:

定义名 作用
RISING 上升沿触发
FALLING 下降沿触发
CHANGE 边缘触发
ONLOW 低电平触发
ONHIGH 高电平触发

使用示例

#include "Arduino.h"
volatile boolean RunBuzzer = true;
const int led = 18;
const int button = 35;

// 中断函数
void warning()
{
  RunBuzzer = !RunBuzzer;
}

void setup()
{
  // 初始化外部中断、pin
  // 当按键按下时,引脚 34 输入的电平由高变低,触发中断函数warning
  pinMode(led, OUTPUT);
  pinMode(button, INPUT);
  attachInterrupt(button, warning, FALLING);    // 设置外部中断
}

void loop()
{
  if (RunBuzzer)
  {
    digitalWrite(led, HIGH);
  }
  else
  {
    digitalWrite(led, LOW);
  }
}