一. Ticker 定时库
Ticker 是ESP32自带库
注意: 不建议使用Ticker回调函数来阻塞IO操作(网络、串口、文件);可以在Ticker回调函数中设置一个标记,在loop函数中检测这个标记;
对于arg,必须是 char, short, int, float, void, char 之一;
1. 定时状态获取 .active();
/**
* Ticker是否激活状态
* @return bool true表示ticker启用
*/
bool active();
2. 终止定时器 .detach()
/**
* 停止Ticker
*/
void detach();
3. once() —— xx秒后只执行一次
/**
* xx秒后只执行一次
* @param seconds 秒数
* @param callback 回调函数
*/
void once(float seconds, callback_function_t callback);
/**
* xx秒后只执行一次
* @param seconds 秒数
* @param callback 回调函数
* @param arg 回调函数的参数
*/
void once(float seconds, void (*callback)(TArg), TArg arg)
示例: 一个传参,一个不传参
#include "Arduino.h"
#include "Ticker.h"
Ticker t1;
Ticker t2;
void func1()
{
Serial.println("我是t1的回调,我没参数");
}
void func1(int a)
{
Serial.print("我是t2的回调,我的参数是:");
Serial.println(a);
}
void setup()
{
Serial.begin(115200);
if (1)
{
t1.once(10, func1);
t2.once(20, func1, 8);
//t1 t2 方法名都叫func1, 但其实是不同的方法, 这涉及到一个方法重载的概念
}
}
void loop()
{
Serial.println("我来证明我没被阻塞,也没法阻塞Ticker");
delay(2700);
}