@[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 差不多,都是到一定时刻执行一定的命令。在库函数中,分别有带参数和不带参数的函数,这样可以在不同特定需求的场合下可以使用