【Timer】定时器
下载例程代码:下载代码
定时器的作用
- 定时器,用来计时,也可以用来产生定时任务,也可以驱动ADC或者是DAC等等.我们给定时器编写一个函数,就是计数到这个时候执行这个函数。
定时器的分类
- 定时器分为硬件定时器和软件定时器两种
-
软件定时器就是使用软件的方式来模拟定时器。精度比较高,us级别的定时
-
硬件定时器就是使用单片机ESP32内部的定时器。精度比较低,但是使用方便。ms级别的定时
-
软件定时器
- 使用软件计时器,需要用到 ESP32 内置的库 Ticker,需要引入
#include <Ticker.h>头文件
使用步骤
-
创建 Ticker 对象
Ticker ticker -
配置 TIcker 工作模式
attach为周期执行ticker.attach(0.5, ISR, 2);- attach函数的参数
- 第一个参数:定时器的周期,单位为秒,这里为0.5秒
- 第二个参数:中断服务程序(ISR)
- 第三个参数:中断服务程序的参数,这里为2
once为一次执行
ticker.once(0.5, ISR,2);- once函数的参数
- 第一个参数:定时器的周期,单位为秒,这里为0.5秒
- 第二个参数:中断服务程序(ISR)
- 第三个参数:中断服务程序的参数,这里为2
- attach函数的参数
例程
-
周期中断
- 使用软件定时器,每隔 0.5 秒反转小灯
#include <Arduino.h>
#include <Ticker.h>
#define led_pin 2
// 定义定时器对象
Ticker ticker;
void toggle(int pin) {
digitalWrite(pin, !digitalRead(pin)); // 翻转LED状态
}
void setup() {
pinMode(led_pin, OUTPUT);
ticker.attach(0.5, toggle, led_pin); // 定时器周期为0.5秒,执行toggle函数,参数为led_pin
}
void loop() {
}
-
一次中断
- 使用软件计时器,每隔 0.5 秒翻转小灯。(翻转一次)
#include <Arduino.h>
#include <Ticker.h>
#define led_pin 2
// 定义定时器对象
Ticker ticker;
void toggle(int pin) {
digitalWrite(pin, !digitalRead(pin)); // 翻转LED状态
}
void setup() {
pinMode(led_pin, OUTPUT);
ticker.attach(0.5, toggle, led_pin); // 定时器周期为0.5秒,执行一次toggle函数,参数为led_pin
}
void loop() {
}
硬件定时器
- 使用硬件定时器,需要用到 ESP32 内置的库 HardwareTimer,需要引入
#include <HardwareTimer.h>头文件