受javascript的 setTimeout 和 setInterval启发 实现的延时定时器
arduino代码无阻塞执行, 效率高, 极简api,功能强大。
将js的事件循环完美引到arduino上。
先上一段使用代码看看如何使用:
代码无阻塞延时, 也不用声明一些无意义的时间变量来控制代码了。
setInterval每隔一段时间执行一次,非常适合打印监控信息。
setTimeout执行完毕立即销毁。clearTime根据id销毁定时任务, 不传或传入0, 则全部清空。
#include <Arduino.h>
#include "cxg_JSTime.h"
//支持arduino uno, stm32, esp32
static JSTime jsTime;
int timeId = 0;
int i = 0;
int j = 0;
void setup() {
Serial.begin(115200);
delay(3000);
//每隔1s执行一次, 执行三次取消执行
timeId = jsTime.setInterval([]() {
Serial.println("setInterval 1000ms");
i++;
if(i == 3) {
Serial.print("clearTime: ");
Serial.println(timeId);
//清除定时器, 如果不指定timeId,则全部取消
jsTime.clearTime(timeId);
}
},
1000);
//无阻塞延时2s
jsTime.setTimeout([]() {
Serial.println("setTimeout delay 2000ms");
//延时嵌套
jsTime.setTimeout([]() {
Serial.println("nesting setTimeout delay 1000ms");
},
1000);
},
2000);
jsTime.setTimeout([]() {
Serial.println("bug: no clear all time");
},
7000);
jsTime.setInterval([]() {
j++;
if(j == 5) {
//清除全部定时器
bool isClearSuccess = jsTime.clearTime(0);
if(isClearSuccess) {
Serial.println("clear all Success");
jsTime.setTimeout([]() {
Serial.println("test success");
},
1000);
}
}
},
1000);
}
void loop() {
jsTime.refresh();
}