【Arduino】Ticker时钟:通过队列实现多个计时器的动态添加

1.问题产生

首先是一段Ticker的标准代码

#include <Ticker.h>
Ticker t1;

void callback()
{
}

void setup()
{
	t1.attach(1,callback);
}

void loop()
{
}

解释:每间隔1秒钟调用callback函数

在现实情况中,我们往往需要多个时钟中断,但是新的attach会覆盖旧的attach。

t1.attach(1,callback01);
t1.attach(1,callback02);

此时只会执行callback02,而callback01回调被覆盖。

因此,需要一种更便捷有效的方式实现多个回调函数的中断

2.代码思路

①构建addAlarm函数用来实现计时器添加

②通过queue队列,实现存储addAlarm添加的Ticker对象。

③addAlarm函数入口参数,secondscallback,前者存储要计时的秒数,后者是回调函数指针

3.源代码


#include <Ticker.h>
#include <queue>
#include <iostream>

std::queue<Ticker> alarmline;  //闹钟对象的队列

void addAlarm(unsigned long seconds, void(*callback)(void))
{
  Ticker t;
  alarmline.push(t);
  alarmline.back().attach(seconds,callback);

	//必须push到队列里,否则函数退出实例化的Ticker会被回收
	
}

void setup() 
{
    Serial.begin(115200);
    Serial.println('\n');
    addAlarm(1, [](){ Serial.println("Alarm 1"); }); 
    //这里纯属为了方便用了lamdba表达式
    addAlarm(3, [](){ Serial.println("Alarm 2"); });
}

void loop()
{

}

4.结语

使用队列为管理计时器提供了很好的方案,后续便于删除(pop),以及检索。(代码中未呈现)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值