为什么我的 Arduino 不能超过 10?
Why can't my Arduino compare above 10?
我在一个 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"
按字典顺序是 "smaller" 而不是 "2"
(即在字典中 "10001
" 会出现在 "2"
之前)。
您要么需要对数字字符串进行适当的比较,要么(很可能更容易)在比较之前将字符串转换为数字。
尝试使用一些 int = stoi(bmp.readAltitude(groundpressure , nullptr, 10) 将 bmp.readAltitude(groundpressure) 转换为 int 并比较结果 int.
我在一个 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"
按字典顺序是 "smaller" 而不是 "2"
(即在字典中 "10001
" 会出现在 "2"
之前)。
您要么需要对数字字符串进行适当的比较,要么(很可能更容易)在比较之前将字符串转换为数字。
尝试使用一些 int = stoi(bmp.readAltitude(groundpressure , nullptr, 10) 将 bmp.readAltitude(groundpressure) 转换为 int 并比较结果 int.