为什么我的Arduino比较高于10?

时间:2017-09-14 16:06:56

标签: c++ variables arduino comparison sensor

我参与了Arduino项目,在那里我不断测量气压,并使用Adafruit_BMP085库计算第一次测量的相对高度。

我显示当前值和峰值。它基本上可以工作,但是一旦当前高度超过10米,它就会停止更新峰值。

Sketch看起来像这样:

#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)

为什么停止比较。是因为我比较的变量类型?

3 个答案:

答案 0 :(得分:3)

是的,这是因为你正在使用重载的>运算符到String类型,这可能是执行词汇,而不是数字比较。

在执行算术运算之前将字符串数据转换为数字。

答案 1 :(得分:2)

字符串比较不同于数字。例如,字典顺序中的字符串"10001""2"“更小”(即在字典"10001中将出现在"2"之前)。

您需要实现数字字符串的正确比较,或者(更可能更容易)将字符串转换为数字,然后再进行比较。

答案 2 :(得分:0)

尝试将bmp.readAltitude(groundpressure)转换为int,并使用一些int = stoi(bmp.readAltitude(groundpressure,nullptr,10)并比较结果int。