过期提醒:本页面距今已有640天没有更新,年久失修,内容可能有所偏颇,还请仔细甄别! Loading... 转载地址:https://www.bbsmax.com/A/Gkz1PmWGdR/ 作者文章中还有各种基础的讲解 ## 1. 前言 Ticker是Arduino Core For ESP8266 内置的一个定时器库,这个库用于规定时间后调用函数。 ## 2. Ticker库 Ticker的功能非常简单,就是规定时间后调用函数。所以读者可以发现本章节非常简短,可以快速了解使用。 总体上,根据功能可以把方法分为两大类: * 定时器管理方法; * 定时器启用方法; ### 2.1 定时器管理方法 #### 2.1.1 detach() —— 停止Ticker 函数说明: ~~~ /** * 停止Ticker */ void detach(); ~~~ #### 2.1.2 active() —— Ticker是否激活状态 函数说明: ~~~ /** * Ticker是否激活状态 * @return bool true表示ticker启用 */ bool active(); ~~~ ### 2.2 定时器启用方法 #### 2.2.1 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) ~~~ callback_function_t定义如下: ~~~ typedef std::function<void(void)> callback_function_t; ~~~ #### 2.2.2 once_ms() —— xx毫秒后只执行一次 ~~~ /** * xx毫秒后只执行一次 * @param seconds 秒数 * @param callback 回调函数 */ void once_ms(float seconds, callback_function_t callback) /** * xx毫秒后只执行一次 * @param seconds 秒数 * @param callback 回调函数 * @param arg 回调函数的参数 */ void once_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg); ~~~ #### 2.2.3 attach() —— 每隔xx秒周期性执行 函数说明: ~~~ /** * 每隔xx秒周期性执行 * @param seconds 秒数 * @param callback 回调函数 */ void attach(float seconds, callback_function_t callback); /** * 每隔xx秒周期性执行 * @param seconds 秒数 * @param callback 回调函数 * @param arg 回调函数的参数 */ void attach(float seconds, void (*callback)(TArg), TArg arg) ~~~ #### 2.2.4 attach_ms() —— 每隔xx毫秒周期性执行 函数说明: ~~~ /** * 每隔xx毫秒周期性执行 * @param seconds 秒数 * @param callback 回调函数 */ void attach_ms(float seconds, callback_function_t callback); /** * 每隔xx毫秒周期性执行 * @param seconds 秒数 * @param callback 回调函数 * @param arg 回调函数的参数 */ void attach_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg) ~~~ 注意点: * 不建议使用Ticker回调函数来阻塞IO操作(网络、串口、文件);可以在Ticker回调函数中设置一个标记,在loop函数中检测这个标记; * 对于arg,必须是 char, short, int, float, void*, char* 之一; ## 3. 实例 ### 3.1 实例1 **实例说明**: 板载LED 0.3s 慢闪,然后 0.1s快闪,最后常亮; **源码**: ~~~ /** * 代码功能:板载LED开始0.3秒闪,然后快闪,最后常亮 */ #include <Ticker.h> Ticker flipper; int count = 0; void flip() { int state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state ++count; // 当翻转次数达到20次的时候,切换led的闪烁频率,每隔0.1s翻转一次 if (count == 20) { flipper.attach(0.1, flip); } // 当次数达到120次的时候关闭ticker else if (count == 120) { flipper.detach(); } } void setup() { //LED_BUILTIN 对应板载LED的IO口 pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); //每隔0.3s 翻转一下led状态 flipper.attach(0.3, flip); } void loop() { } ~~~ 注意点: * LED_BUILTIN并没有看到我们代码中哪里有定义到,其实这个是根据每个板子的不同写在不同的配置文件的。详情请查阅:  各位读者可以查阅源码中的位置,就会发现有很多常用的板子(博主这里使用到的NodeMcu)。 ### 3.2 实例2 **实例说明**: 板载LED 来回快速闪烁 **源码**: ~~~ #include <Ticker.h> Ticker tickerSetHigh; Ticker tickerSetLow; void setPin(int state) { digitalWrite(LED_BUILTIN, state); } void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(1, LOW); // 每隔25ms调用一次 setPin(0) tickerSetLow.attach_ms(25, setPin, 0); // 每隔26ms调用一次 setPin(1) tickerSetHigh.attach_ms(26, setPin, 1); } void loop() { } ~~~ 最后修改:2022 年 03 月 08 日 11 : 17 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 ×Close 赞赏作者 扫一扫支付 支付宝支付 微信支付