Posts Tagged ‘GetTickCount()’
C++ for Arduino EventTimer(事件定时器)循环队列
星期六, 四月 20th, 2013 578 views我们知道在Arduino中是没有线程这个概念的,如果需要同时按照时间间隔执行多个事件,使用系统自带的delay()进行阻塞势必会影响到后面的事件。例如在loop()中我们需要不间断的向电机发送脉冲信号使之行走,同时每间隔1s向控制端发送一次数据。如果采用delay(1000)的方法,电机则会每隔1s才获得一次脉冲信号,这不是我们想要的。所以,我们需要为此自定义一个事件定时器。
事件定时器类的C++代码如下:
EventTimer.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #pragma once #include "Arduino.h" typedef void (*LPFUNC)();//typedef定义一个函数指针 class EventTimer { public: EventTimer(void); ~EventTimer(void); void Init();//初始化 void Looper();//事件循环 void AddEvent(LPFUNC fun,int delay,int repeat);//添加一个事件 private: /*事件结构体*/ struct EventNode{ LPFUNC fun;//事件函数体 int delay;//执行延时 int repeat;//执行次数 int lasttime;//上一个时间 EventNode * next,* prior;//上一级、下一级指针 }; EventNode *head; EventNode *tail; }; |