arduino-esp32-c3一个定时器如何设置两个不同时间的定时
时间: 2024-05-09 14:17:28 浏览: 186
arduino安装时下载esp32的包esptool、mkspiffs-0.2.3-arduino-esp32-win32、等等
5星 · 资源好评率100%
器中断?
对于您的问题,您可以在 Arduino 中使用两个独立的定时器来达到您的目的。您可以使用定时器库提供的功能来创建和管理多个定时器。以下是一个示例代码,其中包含两个单独的定时器中断,每个中断的时间间隔设置不同:
```
#include <Arduino.h>
#include <esp32-hal-timer.h>
volatile int timer1Counter = 0;
volatile int timer2Counter = 0;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR onTimer1() {
portENTER_CRITICAL_ISR(&timerMux);
timer1Counter++;
portEXIT_CRITICAL_ISR(&timerMux);
}
void IRAM_ATTR onTimer2() {
portENTER_CRITICAL_ISR(&timerMux);
timer2Counter++;
portEXIT_CRITICAL_ISR(&timerMux);
}
void setup() {
timerBegin(0, 80, true); // Timer 0, Prescaler 80, Count up
timerAttachInterrupt(0, &onTimer1, true); // Attach Interrupt for Timer 0
timerAlarmWrite(0, 5000000, true); // 5s interval
timerAlarmEnable(0); // Enable Timer 0
timerBegin(1, 80, true); // Timer 1, Prescaler 80, Count up
timerAttachInterrupt(0, &onTimer2, true); // Attach Interrupt for Timer 1
timerAlarmWrite(1, 10000000, true); // 10s interval
timerAlarmEnable(1); // Enable Timer 1
}
void loop() {
portENTER_CRITICAL(&timerMux);
int t1 = timer1Counter;
int t2 = timer2Counter;
timer1Counter = 0;
timer2Counter = 0;
portEXIT_CRITICAL(&timerMux);
Serial.printf("Timer 1 count: %d | Timer 2 count: %d\n", t1, t2);
delay(1000);
}
```
在上面的代码中,我们使用了 `esp32-hal-timer` 库来管理定时器,并创建了两个单独的定时器。每个定时器都有一个独立的中断处理程序,并且有不同的时间间隔。在 `setup()` 中,我们初始化了两个定时器,设置了它们的时间间隔和中断处理程序。在 `loop()` 中,我们读取每个定时器计数器的值,并将其打印到串口。
阅读全文