05.ESP8266定时库-Ticker


定时器管理方法:

1.停止ticker

void detach();

2.查看ticker是否激活

bool active();

3.启动定时器

/**
 * 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 callback_function_t;

4.xxms后只执行一次

/**
 * 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);

5.每隔多少秒周期性执行

/**
 * 每隔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)

5.每隔多少毫秒周期性执行

/**
 * 每隔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* 之一;

实例:板载LED 0.3s 慢闪,然后 0.1s快闪,最后常亮;

#include <Ticker.h>
Ticker flipper;
int count = 0;
#define LED_BUILTIN D1
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() {
}
因为这个东西比较简单,所以就没有过多的演示怎么用笔记参考博哥的esp8266教程,如果对你有帮助可以赏我几块硬币哦!

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录