为什么我的Arduino不能比10以上?

为什么我的Arduino不能比10以上?

问题描述:

我在一个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值。 –

是的,这是因为您正在使用重载的>运算符到String类型,该类型可能正在进行词法对比,而不是数字对比。

执行算术运算之前,你的字符串数据转换为数字。

字符串比较比数字不同。例如,在字典顺序串"10001""2"“小”(在字典"10001即“会来"2"之前)。

你要么需要实现数字串或适当的比较(最有可能更容易)转换该字符串的数字,然后对它们进行比较。

尝试转换bmp.readAltitude(groundpressure)与一些INT = Stoi旅馆(bmp.readAltitude(groundpressure,nullptr,10)到int和比较结果INT。

+1

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

+0

然后currentAltitude必须浮动。 –