0
我有一个Arduino由于我在代码的一个部分做了很多非常干净的东西,我正在处理一个flowsensor并从中读取数据。因为它是一个霍尔传感器设备,所以流量传感器连接到中断。我遇到的问题是,我的数学基于一秒钟的收集数据,当我打开中断和睡眠一秒钟,以gp/m为单位计算流量时,效果很好。然而,对于我的目的,我不能暂停和收集数据,所以我计算了超过一千毫秒的时间变化。然后我从上一次循环开始计算时间,将其分为1000毫秒或1秒,然后我将变量中存储的1秒的百分比存储起来,将计数乘以百分比,并计算每次计数的次数第二。然而,无论我在下一个循环之前将数字清零,这种结果都会增加。下面我已经包含了我为flowsensor设置表达式和循环代码的方式,我会发布整个代码,但是我不想浪费空间在stackoverflow上,并且我知道那部分代码已经可以用sleep方法。Arduino由于C计时器编码(中断计数)
long currentMillis = 0;
long lastMillis = 0;
int checkMillis = 0;
volatile int NbTopsFan; //measuring the rising edges of the signal
int newNbTopsFan;
float realNbTopsFan;
float realMillis;
float Calc;
float Calcd;
int Calcf;
int hallsensor = 7;
void loop()
{
if (lastMillis = 0) {
lastMillis = millis();
}
currentMillis = millis();
checkMillis = (currentMillis - lastMillis);
if (checkMillis >= 1000) {
realMillis = (checkMillis/1000);
realNbTopsFan = (NbTopsFan * realMillis);
newNbTopsFan = realNbTopsFan;
Calc = (newNbTopsFan * 60/7.5); //(Pulse frequency x 60)/7.5Q, = flow rate
Calc = (Calc/60);
Calc = (Calc/3.78541);
Calc = (Calc * 1.47);
Calcd = (Calc * 100);
Calcf = Calcd;
NbTopsFan = 0;
lastMillis = 0;
checkMillis = 0;
realMillis = 0;
realNbTopsFan = 0;
newNbTopsFan = 0;
}
}
这一行:realMillis =(checkMillis/1000);将无法给出正确答案,因为它正在执行整数除法。更好的方法是秒= checkMillis/1000; realMillis =(checkmillis - 秒);或类似的东西,具体取决于你想要完成的事情 – user3629249 2014-10-28 01:17:57