(ESP32学习4)ESP32 外部中断的使用

这一节给大家讲讲ESP32外部中断的使用

其实在loop循环函数里面读取对饮应引脚的值是可以实现和外部中断差不多的效果的,但是我们这里使用Ardunio ESP32 库里面的外部中断函数来完成我们的中断,但是大家尽量不要再中断函数里面执行太长时间的代码,否则的话就直接用循环读取的方法,我这里作为演示,因为我们代码很简单只有中断演示的部分,所以在里面加了一个消抖时间(因为我使用杜邦线把引脚拉高拉低所以一定会出现很大抖动),这个消抖时间如果太长在主函数需要cpu的时候就会托住整个执行。所以消抖是否要加,加多长时间自己根据自己用的什么决定,如果是很稳定的电路板两个芯片之间的引脚交流或者传感器的引脚交流,那可以加很少的消抖时间甚至不加,而如果是按键这种,就加10ms左右,自己调一下,越小越好但还是要保证中断稳定,要是你也拿杜邦线做这个实验,最好20ms以上,人去用手连线,抖动非常大

每一步在干什么代码的注释都写出来了

上代码

const byte interruptPin_0 = 25;  //这就是我们设置中断的目标对应的那个引脚
const byte interruptPin_1 = 23;  //我们设置两个中断来完成这个实验

volatile int interruptCounter = 0;  //0号中断发生中断的次数
volatile int interruptCounter_1 = 0;  //1号中断发生中断的次数

portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;  //声明一个portMUX_TYPE类型的变量,利用其对主代码和中断之间的同步进行处理
portMUX_TYPE mux_1 = portMUX_INITIALIZER_UNLOCKED;

void handleInterrupt() {
  portENTER_CRITICAL_ISR(&mux);
  delay(20);  //延时20ms作为消抖,如果是很稳定的中断可以不加或者加很少的消抖时间
  if(digitalRead(interruptPin_0) == 0)    //因为是下拉触发,所以在消抖时间完后读取引脚高低电平,如果还是为低那么就代表出现了一次稳定的中断
  {
    interruptCounter++;
    Serial.println("0号中断对应的引脚发生中断!!!");
    Serial.print("0号中断发生次数:");Serial.println(interruptCounter);
  } 
  portEXIT_CRITICAL_ISR(&mux);

}

void handleInterrupt_1() {
  portENTER_CRITICAL_ISR(&mux_1);
  delay(20);  //延时20ms作为消抖,如果是很稳定的中断可以不加或者加很少的消抖时间
  if(digitalRead(interruptPin_1) == 1)  //因为是上拉触发,所以在消抖时间完后读取引脚高低电平,如果还是为高那么就代表出现了一次稳定的中断
  {
    interruptCounter_1++;
    Serial.println("1号中断对应的引脚发生中断!!!");
    Serial.print("1号中断发生次数:");Serial.println(interruptCounter_1);
  }
  portEXIT_CRITICAL_ISR(&mux_1);
}

void setup() {
  Serial.begin(115200);
  Serial.println("中断测试实验"); 
  pinMode(interruptPin_0, INPUT_PULLUP);  //先把引脚设置为上拉输入模式
  pinMode(interruptPin_1, INPUT_PULLDOWN);  //这个我们设置为下拉
  //我们通过调用attachInterrupt函数将中断附加到引脚
  //handleInterrupt 是中断触发后的触发函数
  //FALLING 代表下拉触发,也就是由高电平向低电平转化时触发  RISING当然就是上拉触发
  attachInterrupt(digitalPinToInterrupt(interruptPin_0), handleInterrupt, FALLING);
  attachInterrupt(digitalPinToInterrupt(interruptPin_1), handleInterrupt_1, RISING);
}

void loop() {

}
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值