2017-10-09 182 views
0

我看到奇怪的行爲,現在想了解這是否與Arduino UNO或我的代碼有關。Arduino爲1.5V電池顯示錯誤的電壓

我使用Arduino來測量簡單的1.5V電池的電壓。
所以我看到,串行監視器顯示1V電壓而不是1.5V(但電壓表顯示從電池1.5V)。
當我串聯連接2節電池串行監視器顯示3V。

有人可以請解釋發生了什麼事。

這是我的Arduino代碼:

float voltage; 
float batteryIn; 

void setup(){ 
    Serial.begin(9600); 
} 

void loop(){ 

    batteryIn = analogRead(0); 
    float voltage2 = (float)map(batteryIn, 0, 1023, 0, 5); 
    Serial.println(voltage2); 
    delay(50); 
} 

所以顯示1V單電池(但應爲1.5V)。
2串聯電池顯示3V,這是正確的。

+0

我猜map函數只返回一個long類型。所以即使你將它轉換爲浮點數,小數位已經消失了。您必須使用浮點返回來創建您自己的映射函數。 –

+0

試過這個:float voltage2 =(float)batteryIn * 5.000/1024.000;更準確地說,獲得相同的值 – haykp

+0

,現在變爲1.7V。 – haykp

回答

4

map函數只能與long類型一起運行,這意味着它接受long參數並返回long
將整數轉換爲浮點值不會使它神奇地具有十進制值。

您需要實現一個使用浮動操作的map函數。

float mapf(float x, float in_min, float in_max, float out_min, float out_max) 
{ 
    return (x - in_min) * (out_max - out_min)/(in_max - in_min) + out_min; 
} 
float voltage2 = mapf(batteryIn, 0, 1023, 0, 5); 

你的情況,你也可以簡化表達和在線使用。

float voltage2 = batteryIn * 5.0/1023.0; 
+0

沒有幫助,現在獲得1.7V,而不是1.5V(對於這兩種解決方案)((( – haykp

+0

)最有可能的問題是與arduino連接,任何想法如何我可以調試/修復它? – haykp

+0

這段代碼解決了你沒有得到的問題小數點後獲得1.7V而不是1.5V是另一個問題,我懷疑你的Arduino沒有使用5V供電,這個代碼假設使用電壓表來檢查GND和VCC之間的電壓。 –