本帖最后由 大连林海 于 2016-5-1 08:15 编辑
这个只是从前几个帖子中提取出的一部分。完成常见的定时执行程序执行程序。
直接上代码:
- //宏名:timer。返回值:bool 时间到返回真。参数:enable使能,startTime第一次执行时间,delayTime执行间隔时间,doSomeThing任意表达式到时间执行的任务。
- #define timer(enable,startTime,delayTime,doSomeThing) ({\
- static unsigned long timsta = millis();\
- static unsigned long tim = startTime;\
- bool ret = false;\
- if(!enable){timsta = millis();tim = startTime;}else{\
- if (millis() - timsta>= tim){\
- doSomeThing;\
- ret = true;\
- timsta = millis(); \
- tim = delayTime;\
- }\
- }\
- ret;\
- })
- //7号端口led闪烁程序
- void flash() {
- static bool b = true;
- (b = !b ) ? pinMode(7, OUTPUT) : pinMode(7, INPUT);
- }
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- pinMode(8, INPUT_PULLUP);//8号端口接按键
- }
- void loop() {
- // put your main code here, to run repeatedly:
- //定时器调用方式1:通过按键使能led每500ms翻转一次。
- timer(!digitalRead(8), 0, 500, flash());
- //定时器调用方式2:通过内嵌的语句执行,0ms执行第一次,然后每2000ms执行一次。
- timer(true, 0, 2000, Serial.println("Timer2 trig!"));
- //定时器调用方式3:通过timer的返回值触发语句(时间到达时触发一次),从3000ms开始,每2000ms执行一次。
- if (timer(true, 3000, 2000, void())) {
- Serial.println("Timer3 trig!");
- }
- }
复制代码
程序中分别启动了3个定时执行的程序段;
程序段1,定时器调用方式1:通过按键使能led每500ms翻转一次。
程序段2,定时器调用方式2:通过内嵌的语句执行,0ms执行第一次,然后每2000ms执行一次,打印输出"Timer2 trig!"。
程序段3,定时器调用方式3:通过timer的返回值触发语句(时间到达时触发一次),从3000ms开始,每2000ms执行一次,打印输出"Timer3 trig!"。
|
|
|
|
|
|