ESP系列定时器Arduino库使用
// 引入定时器库
#include <Ticker.h>
// 实例化定时器对象
Ticker time1;
Ticker time2;
Ticker time3;
Ticker time4;
void time1_callback() {
Serial.println("时间到,执行我,我是定时器回调函数");
}
void setup() {
// 为定时器配置触发时执行的回调函数
// 每 60 秒执行一次 time1_callback
time1.attach(60, time1_callback);
// 每 1000 ms 执行一次 time1_callback
time2.attach_ms(1000, time1_callback);
// 倒计时 1 个小时,时间到执行一次 time1_callback
time3.once(60 * 60, time1_callback);
// 倒计时 1 分钟,时间到执行一次 time1_callback
time3.once_ms(1000, time1_callback);
}
注意:attach 函数的另一个重载函数,void attach(float seconds, void (*callback)(TArg), TArg arg);,要求回调函数的形参 arg 必须小于 4 字节。
attach() callback argument size must be <= 4 bytes
举一反三
once_ms()类似 JavaScript 中的setTimeout(time1_callback, 1000)attach_ms()类似 JavaScript 中的setInterval(time1_callback, 1000)
回调函数传参
定时器对象的定时方法的重载方法,还支持第 3 个参数,用来传递给回调函数。
void time1_callback(int state) {
// 收到参数:88
Serial.println("收到参数:%s", state);
}
time1.attach(60, time1_callback, 88);
移除定时器
// 移除定时器
time1.detach();
举一反三
- 类似
Javascript中移除定时器window.clearInterval(time1)和window.clearTimeout(time1)
可以看出,JavaScript 不同的定时器,使用不同的清除函数。
判断定时器是否存在
if (time1.active()) {
// 定时器还存话
}

浙公网安备 33010602011771号