Arduino到期C定时器编码(中断计数)

时间:2014-10-27 11:05:08

标签: c timer count arduino sleep

我有一个Arduino因为我在一段代码中做了很多非常简洁的事情我正在处理流量传感器并从中获取读数。由于它是一个hallsensor设备,flowsensor连接到一个中断。我遇到的问题是我的数学基于一秒钟的收集数据,当我打开中断并休眠一秒时,以gp / m为单位进行流量计算效果很好。然而,出于我的目的,我无法暂停和收集数据,因此我计算的时间变化大于一千毫秒。然后我花费自上一次循环以来经过的时间量,将它除以1000毫秒或1秒然后我将1秒的百分比存储在变量中,我将计数乘以百分比并且应该得出每个计数的数量第二。然而,无论我在下一个循环之前将数字归零,这都会导致数量不断增加。下面我已经包含了格式化表达式和flowsensor的循环代码的方式,我发布了整个代码,但我不想在stackoverflow上浪费空间,我知道代码的一部分已经与sleep方法一起使用了

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;
  }
}

1 个答案:

答案 0 :(得分:0)

您的第一行应为:

if ( lastMillis == 0 ) {
    lastMillis = millis();
}

你需要double =来评估变量