抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

通过Ticker库可以让esp8266同时执行多个任务

1、如何实现

示例:在实现一个呼吸灯的同时,在串口监视器打印一些字符信息

  1. 创建 Ticker对象

    1
    Ticker ticker;
  2. 定时执行某个函数

    1
    2
    ticker.attach(time, func);   //time单位为s,func为函数名
    ticker.attach_ms(time, func); //time单位为ms,func为函数名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <Ticker.h>

Ticker ticker;// 建立Ticker用于实现定时功能
int count; // 计数用变量

void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);

// attach函数的第一个参数是控制定时间隔的变量。该参数的单位为秒。第二个参数是
// 定时执行的函数名称。
ticker.attach(1, sayHi);
}

void loop() {
// 用LED呼吸灯效果来演示在Tinker对象控制下,ESP8266可以定时执行其它任务
for (int fadeValue = 0 ; fadeValue <= 1023; fadeValue += 5) {
analogWrite(LED_BUILTIN, fadeValue);
delay(10);
}

for (int fadeValue = 1023 ; fadeValue >= 0; fadeValue -= 5) {
analogWrite(LED_BUILTIN, fadeValue);
delay(10);
}
delay(3000);
}

// 在Tinker对象控制下,此函数将会定时执行。
void sayHi(){
count++;
Serial.print("Hi ");
Serial.println(count);
}

2、其他操作

  • 停止执行定时任务:ticker.detach()

  • 向定时调用函数传递参数:ticker.attach(1, sayHi, 8)

    【注意】:

    attach函数所能传递的参数最多只有一个

    该参数仅能是以下类型中的一种:char, short, int, float, void*, char*

  • 利用多个Ticker对象可以让ESP8266处理多任务

评论