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