为什么我的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)
为什么它停止比较。这是由于我比较的变量类型吗?
是的,这是因为您正在使用重载的>
运算符到String
类型,该类型可能正在进行词法对比,而不是数字对比。
执行算术运算之前,你的字符串数据转换为数字。
字符串比较比数字不同。例如,在字典顺序串"10001"
比"2"
“小”(在字典"10001
即“会来"2"
之前)。
你要么需要实现数字串或适当的比较(最有可能更容易)转换该字符串的数字,然后对它们进行比较。
尝试转换bmp.readAltitude(groundpressure)与一些INT = Stoi旅馆(bmp.readAltitude(groundpressure,nullptr,10)到int和比较结果INT。
'bmp.readAltitude(sealevelPressure)'已经返回'float'。 –
然后currentAltitude必须浮动。 –
你做理解文本和号码之间的区别,对不对? –
你是做一个字符串比较,而“1”小于“4”。 –
'bmp.readAltitude(groundpressure)'返回一个不是String的float值。 –