如何在Arduino程序中设置一个可以在主函数外被调用并能在主函数内持续计时的函数?
时间: 2024-11-18 15:17:18 浏览: 1
AsyncDelay:在Arduino草图中实现延迟和超时的简单抽象
在Arduino程序中,你可以创建一个独立于主函数的全局函数或者静态成员函数,并利用外部中断或者延时函数来实现在主函数之外被调用并持续计时的功能。这里有一个基本的例子,使用`millis()`和事件处理机制:
首先,在头文件中声明这个计时函数:
```cpp
// timer.h
extern unsigned long timerMillis; // 宣告全局变量用于保存计时
void startTimer(void);
```
在源文件中实现计时部分:
```cpp
// timer.cpp
#include "timer.h"
unsigned long lastTimerTick = 0;
void startTimer() {
lastTimerTick = millis();
attachInterrupt(digitalPinToInterrupt(D2), timerTickHandler, RISING); // 连接中断到特定的引脚(假设D2)
}
void timerTickHandler() {
unsigned long currentTick = millis();
static bool firstCall = true;
if (firstCall) {
firstCall = false;
timerMillis = currentTick - lastTimerTick; // 更新计时值
}
lastTimerTick = currentTick; // 更新上次tick时间
}
```
在主函数里,只需调用`startTimer`开始计时:
```cpp
void setup() {
// 其他初始化操作...
startTimer();
}
void loop() {
// 主函数的其他内容...
}
```
这样,`timerMillis`变量就能在主函数外被调用,同时在主函数内部持续更新计时。
阅读全文