Arduino ESP32:测试GPIO中断功能

Arduino ESP32:测试GPIO中断功能

ESP32:测试GPIO中断功能

实例代码

/*
 测试GPIO中断功能
  接线说明: 按键1接23,按键2接18
*/

#include <Arduino.h>

struct Button {
    const uint8_t PIN;
    uint32_t numberKeyPresses;
    bool pressed;
};

Button button1 = {23, 0, false};
Button button2 = {18, 0, false};

void IRAM_ATTR isr(void* arg) {
    Button* s = static_cast<Button*>(arg);
    s->numberKeyPresses += 1;
    s->pressed = true;
}

void IRAM_ATTR isr() {
    button2.numberKeyPresses += 1;
    button2.pressed = true;
}

void setup() {
    Serial.begin(115200);
    pinMode(button1.PIN, INPUT_PULLUP);
    attachInterruptArg(button1.PIN, isr, &button1, FALLING);
    pinMode(button2.PIN, INPUT_PULLUP);
    attachInterrupt(button2.PIN, isr, FALLING);
}

void loop() {
    if (button1.pressed) {
        Serial.printf("Button 1 has been pressed %u times\n", button1.numberKeyPresses);
        button1.pressed = false;
    }
    if (button2.pressed) {
        Serial.printf("Button 2 has been pressed %u times\n", button2.numberKeyPresses);
        button2.pressed = false;
    }
    static uint32_t lastMillis = 0;
    if (millis() - lastMillis > 10000) {
      lastMillis = millis();
      detachInterrupt(button1.PIN);
    }
}

小儿垂钓 唐朝·胡令能
  蓬头稚子学垂纶,侧坐莓苔草映身。
  路人借问遥招手,怕得鱼惊不应人。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arduino ESP32上使用外部中断是一种常见的方式来处理外部事件,比如按钮按下、传感器触发等。ESP32具有多个GPIO引脚可用于外部中断,并且支持上升沿、下降沿和任意电平触发。 以下是使用Arduino代码配置和使用ESP32外部中断的示例: 首先,确定要用作外部中断GPIO引脚。假设我们选择使用GPIO2作为外部中断引脚。 1. 在setup()函数中,使用pinMode()函数将GPIO2配置为输入模式: ```cpp pinMode(2, INPUT); ``` 2. 使用attachInterrupt()函数来配置外部中断。在这个函数中,您需要指定要触发中断的引脚、中断处理函数和触发类型。以下是一个例子,当GPIO2上的电平发生上升沿时触发中断: ```cpp attachInterrupt(digitalPinToInterrupt(2), interruptHandler, RISING); ``` 其中,digitalPinToInterrupt(2)将引脚号转换为对应的外部中断编号。interruptHandler是您自己定义的中断处理函数。RISING表示上升沿触发,您还可以选择使用FALLING(下降沿触发)或CHANGE(任意电平变化触发)。 3. 编写您自己的中断处理函数。这个函数将在中断发生时被调用。以下是一个简单的示例: ```cpp void interruptHandler() { // 在这里处理中断事件 } ``` 通过这个简单的示例,您可以开始使用外部中断来处理各种事件。请注意,ESP32具有多个GPIO引脚可用于外部中断,您可以根据自己的需求选择合适的引脚和触发类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值