本文章借鉴于太极创客团队,以表感谢。
使用Ticker库函数可以轻松实现定时器。
一、Ticker库的几个函数
#include <Ticker.h>
Ticker ticker;// 建立Ticker用于实现定时功能
ticker.attach(1, sayHi);//每隔一秒钟调用sayHi函数一次,attach函数的第一个参数
// 是控制定时间隔的变量,该参数的单位为秒。第二个参数是
// 定时执行的函数名称。
ticker.detach(); // 使用detach来停止ticker对象定时调用函数
ticker.attach(1, sayHi, 8);//这里有3个参数,其中第三个参数就是向定时调用的sayHi函数所传递的参数
ticker.attach_ms(100, sayHi)//每隔100ms钟调用sayHi函数一次
二、一个简单的例子,其中包括了定时和外部触发
#include <Ticker.h>
Ticker ticker;
Ticker buttonTicker;
int count;
void setup()
{
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(D3, INPUT_PULLUP);
ticker.attach(1, sayHi, 60);
buttonTicker.attach_ms(100, buttonCheck);
}
void loop()
{
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);
}
void sayHi(int hiTimes)
{
count++;
Serial.print("Hi ");
Serial.println(count);
if (count >= hiTimes)
{
ticker.detach();
Serial.print("ticker.detach();");
}
}
void buttonCheck()
{
if (digitalRead(D3) == LOW)
{
Serial.println("D3 Button Pushed...");
}
}
三、注意事项
Ticker定时调用的函数必须要“短小精悍”。比如以上一系列的示例程序中,我们仅仅让Ticker定时调用函数执行简单的串口数据输出,以及很基本的运算。事实上,在使用Ticker库时,定时调用函数必须要很快的执行完毕。否则会产生难以预料的问题。
解决方法:创建一个count变量放在Ticker函数里自加或自减,当计数变量count达到我们需要的数值后,则让Ardunio执行较为复杂的函数。完美解决。