首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在arduino上运行后台进程

在arduino上运行后台进程
EN

Stack Overflow用户
提问于 2014-08-06 15:11:38
回答 2查看 5.3K关注 0票数 0

我试图让我的arduino mega在后台运行一个函数,同时它还运行一些其他函数。

我试图在后台运行的函数是一个从风速计中确定风速的函数。它处理数据的方式类似于一个里程计,因为它读取风速表在一定时间内所做的旋转次数,然后在一段时间内取这个旋转数来确定风速。我让它运行的时间越长,我收到的数据就越准确,因为平均的数据越多。

我的问题是,还有一些其他的数据,我也在读到arduino,我想一秒钟读一遍。这第二个时间间隔太短,我无法获得准确的风读数,因为没有足够的转速正在完成的风速计,以提供高精度的风数据。

有没有办法让风传感器功能在后台运行,每5秒左右更新一次全局变量,而我的程序其余部分同时运行,每秒钟更新一次其他数据。

这是我从风传感器读取数据的代码。每次风传感器旋转时,有一部分信号读取为0,否则传感器读取的整数大于0。

代码语言:javascript
复制
 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秒的延迟运行,但正如我通过试验和错误发现,延迟以及对其他函数的处理使得延迟实际上超过了1秒钟,并且根据我从其他传感器读取的数据类型而变化,因此我认为一个用于计时的5循环计数器不会在这里工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-06 16:11:54

让别人打断你的工作吧。

简而言之,我建议使用一个计时器中断来生成一个周期性的中断,用于测量背景中的模拟读数。随后,这可以更新静态易失性变量。

请参阅我的答案here,因为它是一个类似的场景,详细说明了如何使用计时器中断。可以用上面的类似读和增量替换回调()。

票数 2
EN

Stack Overflow用户

发布于 2014-08-06 15:23:44

在不了解其余代码是如何设置的情况下,我将尝试将风挡作为一个全局变量,并添加另一个整数,该整数每秒钟迭代一次主程序循环。然后:

代码语言:javascript
复制
// in the main loop
if(iteratorVariable >= 5){
  iteratorVariable = 0;
  // take your windreading and implement logic here
} else {
  iteratorVariable++;
}

我不知道你的风速表是如何存储数据的,或者你可能面临什么其他挑战,所以这可能不是一个100%的解决方案,但它可以让你每隔5秒钟运行一次逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25164002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档