在arduino上运行后台进程
running a background process on arduino
我正试图让我的arduino mega在后台运行一个函数,同时它也在运行一堆其他函数。
我试图在后台运行的函数是一个从风速计确定风速的函数。它处理数据的方式类似于里程表,因为它读取风速计在一段时间内的转数,然后根据这段时间内的转数来确定风速。我让它运行的时间越长,我收到的数据就越准确,因为有更多的数据需要平均。
我遇到的问题是有一堆其他数据,我也在阅读arduino,我想在一秒钟内阅读一次。这一秒的时间间隔太短,我无法获得准确的风速读数,因为风速计没有完成足够的转数,无法获得高精度的风速数据。
是否有一种方法可以让风传感器函数在后台运行,并每隔5秒左右更新一次全局变量,而我的程序的其余部分同时运行并每秒更新其他数据。
这是我从风传感器读取数据的代码。风传感器每转一圈,就有一部分信号读取为0,否则传感器读取为大于0的整数。
void windmeterturns(){
startime = millis();
endtime = startime + 5000;
windturncounter = 0;
turned = false;
int terminate = startime;
while(terminate <= endtime){
terminate = millis();
windreading = analogRead(windvelocityPin);
if(windreading == 0){
if(turned == true){
windturncounter = windturncounter + 1;
turned = false;
}
}
else if(windreading >= 1){
turned = true;
}
delay(5);
}
}
的其余处理发生在另一个函数中,但这是我目前正在努力解决的问题。在这里张贴整个代码是不合理的,因为它接近1000行。
其他函数在循环中运行1秒延迟,但正如我通过试验和错误发现的延迟以及其他函数的处理使其延迟实际上长于一秒,并且它根据我从其他传感器读取的数据类型而变化,因此用于计时的5循环计数器我认为不会在这里工作
让Interrupts为你做这些工作。
简而言之,我建议使用定时器中断来生成一个周期性中断,以测量后台的模拟读数。随后可以更新静态volatile变量。
在这里看到我的答案,因为它是一个类似的场景,详细说明了如何使用定时器中断。你可以用上面的模拟值和增量来代替callback()。
在不查看其余代码如何设置的情况下,我会尝试将windturncounter作为全局变量,并添加另一个整数,该整数在主程序循环的每秒钟迭代一次。然后:
// in the main loop
if(iteratorVariable >= 5){
iteratorVariable = 0;
// take your windreading and implement logic here
} else {
iteratorVariable++;
}
我不确定你的风速表如何存储数据或你可能面临的其他挑战,所以这可能不是一个100%的解决方案,但它可以让你每隔五秒从原始帖子运行逻辑。
- 如何制作启动 Python 脚本的 linux 后台进程(在 c 中)
- 在程序继续C++时保持进程运行
- CLion 如何终止进程运行?
- 如何使用 std::in 和 getline() 检测后台进程中从 bash 注入的输入
- 如何允许计时器在后台继续运行
- 使用 POCO 启动后台进程
- Linux 守护进程 - 运行函数两次
- 如何仅在C中向后台进程发送SIGINT
- 识别后台进程并在 C++ WIN32 中置于前台
- SYSTEM_INFO::d wActiveProcessorMask是否可以在我的进程运行时更改
- 如何保持进程运行
- 如何在后台进程上处理来自Windows任务管理器的"End Task"?
- 程序(nload)在shell中执行时作为守护进程运行,但不在启动/自动化脚本中执行
- 从Mono上运行的C#进程运行C++应用程序.运行检测器错误
- 将后台进程发送到前台
- 在arduino上运行后台进程
- Pidof从一个后台脚本到另一个后台进程
- 运行后台进程Linux简单shell.c++
- 使用system()执行后台进程
- 在后台连续运行windows phone8.1应用程序