ESP8266開發之旅 基礎篇⑥ Ticker——ESP8266定時庫

授人以魚不如授人以漁,目的不是爲了教會你具體項目開發,而是學會學習的能力。但願你們分享給你周邊須要的朋友或者同窗,說不定大神成長之路有博哥的奠定石。。。git

QQ技術互動交流羣:ESP8266&32 物聯網開發 羣號622368884,不喜勿噴web

1、你若是想學基於Arduino的ESP8266開發技術

1、基礎篇網絡

  1. ESP8266開發之旅 基礎篇① 走進ESP8266的世界
  2. ESP8266開發之旅 基礎篇② 如何安裝ESP8266的Arduino開發環境
  3. ESP8266開發之旅 基礎篇③ ESP8266與Arduino的開發說明
  4. ESP8266開發之旅 基礎篇④ ESP8266與EEPROM
  5. ESP8266開發之旅 基礎篇⑤ ESP8266 SPI通訊和I2C通訊
  6. ESP8266開發之旅 基礎篇⑥ Ticker——ESP8266定時庫

2、網絡篇函數

  1. ESP8266開發之旅 網絡篇① 認識一下Arduino Core For ESP8266
  2. ESP8266開發之旅 網絡篇② ESP8266 工做模式與ESP8266WiFi庫
  3. ESP8266開發之旅 網絡篇③ Soft-AP——ESP8266WiFiAP庫的使用
  4. ESP8266開發之旅 網絡篇④ Station——ESP8266WiFiSTA庫的使用
  5. ESP8266開發之旅 網絡篇⑤ Scan WiFi——ESP8266WiFiScan庫的使用
  6. ESP8266開發之旅 網絡篇⑥ ESP8266WiFiGeneric——基礎庫
  7. ESP8266開發之旅 網絡篇⑦ TCP Server & TCP Client
  8. ESP8266開發之旅 網絡篇⑧ SmartConfig——一鍵配網
  9. ESP8266開發之旅 網絡篇⑨ HttpClient——ESP8266HTTPClient庫的使用
  10. ESP8266開發之旅 網絡篇⑩ UDP服務
  11. ESP8266開發之旅 網絡篇⑪ WebServer——ESP8266WebServer庫的使用
  12. ESP8266開發之旅 網絡篇⑫ 域名服務——ESP8266mDNS庫
  13. ESP8266開發之旅 網絡篇⑬ SPIFFS——ESP8266 Flash文件系統
  14. ESP8266開發之旅 網絡篇⑭ web配網
  15. ESP8266開發之旅 網絡篇⑮ 真正的域名服務——DNSServer
  16. ESP8266開發之旅 網絡篇⑯ 無線更新——OTA固件更新

3、應用篇oop

  1. ESP8266開發之旅 應用篇① 局域網應用 ——炫酷RGB彩燈
  2. ESP8266開發之旅 應用篇② OLED顯示天氣屏
  3. ESP8266開發之旅 應用篇③ 簡易版WiFi小車

4、高級篇學習

  1. ESP8266開發之旅 進階篇① 代碼優化 —— ESP8266內存管理
  2. ESP8266開發之旅 進階篇② 閒聊Arduino IDE For ESP8266配置
  3. ESP8266開發之旅 進階篇③ 閒聊 ESP8266 Flash
  4. ESP8266開發之旅 進階篇④ 常見問題 —— 解決困擾
  5. ESP8266開發之旅 進階篇⑤ 代碼規範 —— 像寫文章同樣優美
  6. ESP8266開發之旅 進階篇⑥ ESP-specific APIs說明

1. 前言

    Ticker是Arduino Core For ESP8266 內置的一個定時器庫,這個庫用於規定時間後調用函數。優化

2. Ticker庫

    Ticker的功能很是簡單,就是規定時間後調用函數。因此讀者能夠發現本章節很是簡短,能夠快速瞭解使用。
    老規矩,先上一個博主總結的百度腦圖:
imageui

整體上,根據功能能夠把方法分爲兩大類:.net

  • 定時器管理方法;
  • 定時器啓用方法;

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並無看到咱們代碼中哪裏有定義到,其實這個是根據每一個板子的不一樣寫在不一樣的配置文件的。詳情請查閱:
    image

各位讀者能夠查閱源碼中的位置,就會發現有不少經常使用的板子(博主這裏使用到的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() {
}

4. 總結

本篇章很是簡單,就是一個Ticker定時器的使用,請讀者快速翻閱;

相關文章
相關標籤/搜索