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

Why can't my Arduino compare above 10?

本文关键字:以上 比较 不能 我的 Arduino 为什么      更新时间:2023-10-16

我正在参加一个Arduino项目,我不断测量气压,并使用Adafruit_BMP085库从第一次测量开始计算相对高度。

显示当前值以及峰值。它基本上有效,但是一旦当前高度超过10m,它就会停止更新峰值。

草图看起来像这样:

#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,其中包含一些 int = stoi(bmp.readAltitude(groundpressure, nullptr, 10) 并比较结果 int。