Ticker#
Arduino Ticker 库允许您轻松创建 Ticker 回调,这些回调可以在预定的时间间隔内调用函数。利用Ticker库,我们可以让K210定时调用某一个函数。 使用不同API您可以设定单次或重复运行。该库使用硬件定时器的中断,尽可能控制回调函数代码量大小。
attach#
描述#
给 Ticker 设定回调函数以及调用间隔时间,回调重复运行。
语法#
1.回调函数不带参
void attach(float seconds, callback_t callback);
2.回调函数带参数
void attach(float seconds, void (*callback)(TArg), TArg arg);
参数#
seconds
调用间隔时间,单位:秒callback
回调函数arg
回调函数的参数
返回值#
无
示例说明#
void setPin(int state) {
digitalWrite(LED_PIN, state);
}
Ticker tickerSetLow;
tickerSetLow.attach(2, setPin, 0);
attach_ms#
描述#
给 Ticker 设定回调函数以及调用间隔时间,回调重复运行。
语法#
1.回调函数不带参
void attach_ms(uint32_t milliseconds, callback_t callback);
2.回调函数带参数
void attach_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg);
参数#
milliseconds
调用间隔时间,单位:毫秒callback
回调函数arg
回调函数的参数
返回值#
无
示例说明#
void setPin(int state) {
digitalWrite(LED_PIN, state);
}
Ticker tickerSetLow;
tickerSetLow.attach_ms(25, setPin, 0);
once#
描述#
给 Ticker 设定回调函数以及调用间隔时间,回调仅运行一次。
语法#
1.回调函数不带参
void once(float seconds, callback_t callback);
2.回调函数带参数
void once(float seconds, void (*callback)(TArg), TArg arg);
参数#
seconds
调用间隔时间,单位:秒callback
回调函数arg
回调函数的参数
返回值#
无
示例说明#
void change() {
blinkerPace = 0.5;
}
Ticker changer;
changer.once(30, change);
once_ms#
描述#
给 Ticker 设定回调函数以及调用间隔时间,回调仅运行一次。
语法#
1.回调函数不带参
void once_ms(uint32_t milliseconds, callback_t callback);
2.回调函数带参数
void once_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg);
参数#
milliseconds
调用间隔时间,单位:毫秒callback
回调函数arg
回调函数的参数
返回值#
无
示例说明#
void change() {
blinkerPace = 0.5;
}
Ticker changer;
changer.once_ms(30, change);
detach#
描述#
停止定时执行函数。
语法#
void detach();
返回值#
无
示例说明#
Ticker blinker;
blinker.detach();
active#
描述#
检测定时器是否使能,是则返回True。
语法#
bool active();
返回值#
是否使能
示例说明#
Ticker blinker;
bool en = blinker.active();
例程 - Blinker.ino#
使用 `Ticker` 控制led闪烁
以下是一个LED闪烁控制程序,它通过定时器和GPIO控制LED的亮灭状态。具体实现包括三个定时器:blinker、toggler和changer。
首先,在setup()函数中,我们配置了LED接口为输出模式,并使用toggler.attach()函数周期性地调用toggle()函数来让LED在固定时间间隔内闪烁。同时,我们使用changer.once()函数延迟一段时间后调用change()函数,从而改变blinkerPace的值,使LED闪烁的速度更快。
然后,在toggle()函数中,我们通过isBlinking变量来判断当前是否正在闪烁LED,如果是,则通过blinker.detach()函数停止闪烁;如果不是,则通过blinker.attach()函数开始闪烁LED。
最后,在blink()函数中,我们使用digitalWrite()函数来改变LED的状态。
需要注意的是,该程序中使用了多个定时器,因此需要避免定时器之间的冲突或重叠。同时,由于涉及到硬件控制,必须小心处理,以避免损坏设备。
#include <Arduino.h>
#include <Ticker.h>
// attach a LED to pPIO 35
#define LED_PIN 35
Ticker blinker; // 定义一个Ticker对象,用于控制LED闪烁
Ticker toggler; // 定义一个Ticker对象,用于控制LED闪烁的开关
Ticker changer; // 定义一个Ticker对象,用于控制LED闪烁的速度变化
float blinkerPace = 0.1; //seconds // 定义闪烁的时间间隔为0.1秒
const float togglePeriod = 5; //seconds // 定义LED闪烁的周期为5秒
void change() { // 定义一个函数,用于改变LED闪烁的速度
blinkerPace = 0.5;
}
void blink() { // 定义一个函数,用于LED闪烁
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
void toggle() { // 定义一个函数,用于控制LED闪烁的开关
static bool isBlinking = false;
if (isBlinking) {
blinker.detach(); // 如果LED正在闪烁,就停止闪烁
isBlinking = false;
}
else {
blinker.attach(blinkerPace, blink); // 如果LED没有在闪烁,就开始闪烁
isBlinking = true;
}
// 确保LED在闪烁开关切换后处于开启状态
digitalWrite(LED_PIN, LOW); //make sure LED on on after toggling (pin LOW = led ON)
}
void setup() {
pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式
toggler.attach(togglePeriod, toggle); // 设置LED闪烁的周期
changer.once(30, change); // 设置LED闪烁的速度变化
}
void loop() {
}