为什么我的 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"
比"2"
"小"(即在字典中"10001
"将在"2"
之前)。
您要么需要对数字字符串进行适当的比较,要么(很可能更容易)在比较字符串之前将字符串转换为数字。
尝试将 bmp.readAltitude(groundpressure) 转换为 int,其中包含一些 int = stoi(bmp.readAltitude(groundpressure, nullptr, 10) 并比较结果 int。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- C++将目录中的所有文件与::filesystem进行比较
- shell排序中的交换和比较
- 如何在C++中比较两个char数组
- catch框架有没有办法比较流或文件
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 智能指针作为无序映射键,并通过引用进行比较
- 比较if语句中的数组值和int值
- 对于循环变体比较
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 为什么我的 Arduino 不能比较 10 以上?