2017-09-14 69 views
0

我在一個Arduino項目中,我不斷地測量所述的空氣壓力,並從使用Adafruit_BMP085庫中的第一測量計算的相對高度。爲什麼我的Arduino不能比10以上?

我顯示當前值和峯值。它基本上可以工作,但是一旦當前高度超過10米,就會停止更新峯值。

草圖看起來是這樣的:

#include <Adafruit_BMP085.h> 

String currentAltitude; 
String peakAltitude; 
int32_t groundpressure; 

Adafruit_BMP085 bmp; 

void setup() { 
    groundpressure = bmp.readPressure(); 
} 

void loop() { 
    currentAltitude = bmp.readAltitude(groundpressure); 
    if (currentAltitude > peakAltitude) { 
     peakAltitude = currentAltitude; 
    } 
    Serial.println("Current: " + currentAltitude + "m"); 
    Serial.println("Peak: " + peakAltitude + "m"); 
    delay(10); 
} 

我得到了(當我提出的傳感器/或增加空氣壓力)是這樣的:

Current: 0m 
Peak: 0m 

Current: 4m 
Peak: 4m 

Current: 11m 
Peak: 4m (still) 

爲什麼它停止比較。這是由於我比較的變量類型嗎?

+2

你做理解文本和號碼之間的區別,對不對? –

+0

你是做一個字符串比較,而「1」小於「4」。 –

+0

'bmp.readAltitude(groundpressure)'返回一個不是String的float值。 –

回答

3

是的,這是因爲您正在使用重載的>運算符到String類型,該類型可能正在進行詞法對比,而不是數字對比。

執行算術運算之前,你的字符串數據轉換爲數字。

2

字符串比較比數字不同。例如,在字典順序串"10001""2"「小」(在字典"10001即「會來"2"之前)。

你要麼需要實現數字串或適當的比較(最有可能更容易)轉換該字符串的數字,然後對它們進行比較。

0

嘗試轉換bmp.readAltitude(groundpressure)與一些INT = Stoi旅館(bmp.readAltitude(groundpressure,nullptr,10)到int和比較結果INT。

+1

'bmp.readAltitude(sealevelPressure)'已經返回'float'。 –

+0

然後currentAltitude必須浮動。 –

相關問題