ESP8266内置的定时器库--Ticker库

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定时器的使用,请读者快速翻阅;

posted @ 2020-03-05 20:05  chenlife  阅读(6657)  评论(0编辑  收藏  举报