Ticker的功能非常簡單,就是規定時間后調用函數

總體上,根據功能可以把方法分為兩大類:
定時器管理方法;
定時器啟用方法;
detach() 停止定時器
active() 定時器是否工作
返回值 bool
1.1 前言
Ticker是Arduino Core For ESP8266 內置的一個定時器庫,這個庫用於規定時間后調用函數。
1.2 Ticker庫
Ticker的功能非常簡單,就是規定時間后調用函數。所以讀者可以發現本章節非常簡短,可以快速了解使用。 老規矩,先上一個博主總結的百度腦圖:
總體上,根據功能可以把方法分為兩大類:
- 定時器管理方法;
- 定時器啟用方法;
1.2.1 定時器管理方法
1.2.1.1 detach() —— 停止Ticker
函數說明:
/** * 停止Ticker */ void detach();
1.2.1.2 active() —— Ticker是否激活狀態
函數說明:
/** * Ticker是否激活狀態 * @return bool true表示ticker啟用 */ bool active();
1.2.2 定時器啟用方法
1.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;
1.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);
1.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)
1.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* 之一;
1.3 實例
1.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)。
1.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() { }
1.4 總結
本篇章非常簡單,就是一個Ticker定時器的使用,請讀者快速翻閱;