2014-07-08 46 views
0

我遇到了嘗試將加速器的G值從int更改爲float的問題。當我簡單地改變變量的類型從int浮動,這是串行輸出看起來像坐在這一點的同時仍:將G值從Arduino加速度計轉換爲浮點數

-26844 -17153 -26844 
mph/s: -0.17 
-20133 -17217 -26844 
mph/s: -0.17 
-26844 -17153 -26844 
mph/s: -0.17 
-20133 -17217 -26844 
mph/s: -0.17 
-20133 -17217 -26844 
mph/s: -0.17 
-20133 -17217 -26844 
mph/s: -0.17 
-20133 -17217 -26844 
mph/s: -0.17 

而當它只是一個普通的int變量類型,它看起來正常:

0 0 1 
mph/s: 0 
0 0 1 
mph/s: 0 
0 0 1 
mph/s: 0 
0 0 1 
mph/s: 0 
0 0 1 
mph/s: 0 
0 0 1 
mph/s: 0 

但是,我需要G值的浮點版本,以便我可以精確計算mph/s。

編輯:由於保密原因,完整的代碼已被刪除。

//we send the x y z values as a string to the serial port 
    sprintf(str, "%d %d %d", xg, yg, zg); 
    Serial.print(str); 
    Serial.write(10); 

    Serial.print("mph/s: "); 
    Serial.println(mphs); 

    //It appears that delay is needed in order not to clog the port 
    delay(15); 
} 
+0

你可以顯示你正在使用的浮點版本的確切代碼嗎?請注意,使用%d格式的sprintf對他們來說效果不佳。 –

回答

0

在您的代碼示例,xgygzg都是浮動。 printf對不同的數據類型使用不同的格式說明符。 "%d"用於積分值,"%f"用於單精度浮點值。

你的代碼更改爲:

//we send the x y z values as a string to the serial port 
    sprintf(str, "%f %f %f", xg, yg, zg); 

你可以看一下這裏的其他格式說明:printf Type Field Characters

編輯:它似乎默認情況下Arduino不鏈接浮點庫。您需要啓用它們,如下所述:Arduino: printf/fprintf prints question mark instead of float

+0

不起作用,它是這樣出現的:? ? ? mph/s:0.34 ? ? ? mph/s:0.17 ? ? ? mph/s:0.34 ? ? ? mph/s:0.17 – Josh

+0

@Josh查看我的編輯 – metacubed

+0

好的,這是有道理的,但我究竟在哪裏放置鏈接器標誌代碼? – Josh

0

在我看來問題出在sprintf語句。您將float Xg,Yg和Zg轉換爲%d到sprintf()。

在堆棧溢出處理類似問題有一箇舊帖子。 Check that out