我试图让我的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秒的延迟运行,但正如我通过试验和错误发现,延迟以及对其他函数的处理使得延迟实际上超过了1秒钟,并且根据我从其他传感器读取的数据类型而变化,因此我认为一个用于计时的5循环计数器不会在这里工作。
发布于 2014-08-06 16:11:54
让别人打断你的工作吧。
简而言之,我建议使用一个计时器中断来生成一个周期性的中断,用于测量背景中的模拟读数。随后,这可以更新静态易失性变量。
请参阅我的答案here,因为它是一个类似的场景,详细说明了如何使用计时器中断。可以用上面的类似读和增量替换回调()。
发布于 2014-08-06 15:23:44
在不了解其余代码是如何设置的情况下,我将尝试将风挡作为一个全局变量,并添加另一个整数,该整数每秒钟迭代一次主程序循环。然后:
// in the main loop
if(iteratorVariable >= 5){
iteratorVariable = 0;
// take your windreading and implement logic here
} else {
iteratorVariable++;
}我不知道你的风速表是如何存储数据的,或者你可能面临什么其他挑战,所以这可能不是一个100%的解决方案,但它可以让你每隔5秒钟运行一次逻辑。
https://stackoverflow.com/questions/25164002
复制相似问题