2014-10-27 76 views
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; 
    } 
} 
+0

這一行:realMillis =(checkMillis/1000);將無法給出正確答案,因爲它正在執行整數除法。更好的方法是秒= checkMillis/1000; realMillis =(checkmillis - 秒);或類似的東西,具體取決於你想要完成的事情 – user3629249 2014-10-28 01:17:57

回答

0

你的第一行應爲:

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

您需要的雙重=評估變量