前言
本节我们学习使用WeMos D1的定时器,使用定时器可以实现定时、延时控制功能、PWM输出、计数以及对外部事件的检测。
一、基础知识
1.WeMos D1定时器简介
WeMos D1中定时器通过Ticker实现,Ticker是一个定时器库,通过Ticker可以很容易实现定时器功能。当前不建议从Ticker回调函数中阻止IO操作(网络,串行,文件)。 最好在代码回调中设置一个标志,然后在循环函数中检查该标志。
2. WeMos D1定时器函数说明
二、实例
实例程序开启两个定时器,一个是单次定时,6秒后进入单次定时回调函数,另一个是循环定时,每隔3秒进入依次回调函数。
#include <Arduino.h>
#include <Ticker.h>
Ticker tk, tk1;
int timer_flag = 0;
int count = 0;
void timer_coming_once_cb(void)
{
Serial.println("time coming only once.");
tk1.detach();
}
void time_coming_cicyle_cb(void)
{
timer_flag = 1;
count++;
}
void setup() {
Serial.begin(9600);
tk1.once(6, timer_coming_once_cb);
// call time_coming_cicyle_cb every 3s
tk.attach(3, time_coming_cicyle_cb);
}
void loop() {
if (1 == timer_flag)
{
Serial.println("time coming......");
Serial.println(count);
timer_flag = 0;
if (10 == count)
{
Serial.println("stop timer");
tk.detach();
}
}
}
上述程序中,使用到了attch(),detach(),once()函数,毫秒级延时同样用法,只是定时时间变短。
三、运行
点击上传,设备运行后Log如下所示:
从图中可知,我们现在已经可以正常操作定时器了。
四、结语
1.总结:
本节完,实际操作过程中需要注意的地方有如下几点:
(1) 定时器的定义
如果使用多种定时方式,应该多定义结果Ticker类型变量,如图中使用了单次定时和循环定时,也定义了两个变量,分别对应tk和tk1。
2.后记:
如您在使用过程中有任何问题,请加QQ群进一步交流,也可以github提Issue。
QQ交流群:906015840 (备注:物联网项目交流)
获取源码:关注公众号,回复wemos即可
一叶孤沙出品:一沙一世界,一叶一菩提