美文网首页ESP8266 Arduino物联网开发之旅
ESP8266开发之旅 基础篇⑥ Ticker——ESP8266

ESP8266开发之旅 基础篇⑥ Ticker——ESP8266

作者: 单片机菜鸟博哥 | 来源:发表于2019-02-13 14:51 被阅读64次

    1.1 前言

        Ticker是Arduino Core For ESP8266 内置的一个定时器库,这个库用于规定时间后调用函数。

    1.2 Ticker库

        Ticker的功能非常简单,就是规定时间后调用函数。所以读者可以发现本章节非常简短,可以快速了解使用。
        老规矩,先上一个博主总结的百度脑图:

    image

    总体上,根据功能可以把方法分为两大类:

    • 定时器管理方法;
    • 定时器启用方法;

    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并没有看到我们代码中哪里有定义到,其实这个是根据每个板子的不同写在不同的配置文件的。详情请查阅:


      image

    各位读者可以查阅源码中的位置,就会发现有很多常用的板子(博主这里使用到的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定时器的使用,请读者快速翻阅;

    博哥ESP8266 qq交流群:869920142

    image

    相关文章

      网友评论

        本文标题:ESP8266开发之旅 基础篇⑥ Ticker——ESP8266

        本文链接:https://www.haomeiwen.com/subject/sahdeqtx.html