arduino实现一个无阻塞延时库JSTime

受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();
}

下载地址  GitHub - chengxg/cxg-arduino-lib: 我的一些arduino库

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值