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() {
  
}