@[toc]
目的
利用定时器,使 LED 灯进行闪烁
主要函数
void once(float seconds, callback_t callback)
在 seconds 秒时执行命令,该命令只执行一次
void once_ms(uint32_t milliseconds, callback_t callback) 在 milliseconds 毫秒时执行命令,该命令只执行一次
void attach(float seconds, void (*callback)(TArg), TArg arg) 在每 seconds 秒后执行命令,命令带参数
void attach_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg) 在每 milliseconds 毫秒后执行命令,命令带参数
void Ticker::attach(float seconds, callback_t callback) 在每 seconds 秒后执行命令,命令不带参数
void attach_ms(uint32_t milliseconds, callback_t callback) 在每 milliseconds 毫秒后执行命令,命令不带参数
示例代码
带参数
#include <Arduino.h>
#include <Ticker.h>
#define LED_PIN 18
Ticker tickerSetHigh;
Ticker tickerSetLow;
void setPin(int state) {
  digitalWrite(LED_PIN, state);
}
void setup() {
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(1, LOW);
  
  // 每 25 ms 执行setPin(0)
  tickerSetLow.attach_ms(25, setPin, 0);
  
  // 每 25 ms 执行setPin(1)
  tickerSetHigh.attach_ms(26, setPin, 1);
}
void loop() {
}
不带参数
#include <Arduino.h>
#include <Ticker.h>
#define LED_PIN 18
Ticker blinker;
Ticker toggler;
Ticker changer;
float blinkerPace = 0.1;  //seconds
const float togglePeriod = 5; //seconds
void change() {
  blinkerPace = 0.5;
}
void blink() {
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
void toggle() {
  static bool isBlinking = false;
  if (isBlinking) {
    blinker.detach();
    isBlinking = false;
  }
  else {
    blinker.attach(blinkerPace, blink);
    isBlinking = true;
  }
  digitalWrite(LED_PIN, LOW);  //确保闪烁后 LED 是灭
}
void setup() {
  pinMode(LED_PIN, OUTPUT);
  toggler.attach(togglePeriod, toggle);   // 每 5 秒执行一次
  changer.once(30, change);    // 30 秒后执行一次就不再执行
}
void loop() {
  
}
总结
用定时器进行其他操作都跟操作 LED 差不多,都是到一定时刻执行一定的命令。在库函数中,分别有带参数和不带参数的函数,这样可以在不同特定需求的场合下可以使用