C++ 将串行监视器(Arduino Uno)的变量更改为文本
我使用的是HC-SR04超声波传感器,它显示距离,有两个if语句,如果低于0,则显示为0(该部分按预期工作),如果超过4米(距离变量为1厘米),则应显示“超出范围”,这就是我遇到问题的部分。这是完整的代码C++ 将串行监视器(Arduino Uno)的变量更改为文本,c++,arduino-uno,arduino-ultra-sonic,serial-monitor,C++,Arduino Uno,Arduino Ultra Sonic,Serial Monitor,我使用的是HC-SR04超声波传感器,它显示距离,有两个if语句,如果低于0,则显示为0(该部分按预期工作),如果超过4米(距离变量为1厘米),则应显示“超出范围”,这就是我遇到问题的部分。这是完整的代码 const int TrigPin = 2; const int EchoPin = 3; float distance; void setup() { Serial.begin(9600); pinMode(TrigPin,OUTPUT); pinMode(EchoPi
const int TrigPin = 2;
const int EchoPin = 3;
float distance;
void setup() {
Serial.begin(9600);
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
}
void loop () {
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
distance = pulseIn(EchoPin,HIGH)/58.0; // divided by 58 to change into cm
if(distance < 0) {
distance = 0;
}
if(distance > 400) {
distance = "Out of range";
}
Serial.println(distance );
}
const int TrigPin=2;
常数int EchoPin=3;
浮动距离;
无效设置(){
Serial.begin(9600);
引脚模式(TrigPin,输出);
pinMode(EchoPin,输入);
}
空循环(){
数字写入(TrigPin,低电平);
延迟微秒(2);
数字写入(TrigPin,高);
延迟微秒(10);
数字写入(TrigPin,低电平);
距离=pulseIn(EchoPin,高)/58.0;//除以58可转换为厘米
如果(距离<0){
距离=0;
}
如果(距离>400){
距离=“超出范围”;
}
串行打印LN(距离);
}
这将返回一个错误,该错误表示“无法将赋值中的‘const char[13]”转换为‘float’”(第26行),是否有方法在不使用新变量的情况下转换距离变量?(距离变量已经有另一个if语句)。我是这方面的初学者,所以解决方案可能非常简单,我只是不知道。
距离是一个浮点数,不能将浮点数设置为字符*
是否有任何方法可以在不使用新变量的情况下转换距离变量
变量
在声明变量为int之后,您不能将其转换为另一种数据类型。您可以做的是将其声明为char*(string),然后当您想将其设置为类似于0的数字时,将该数字转换为字符串。也就是说,如果您真的希望两者都有一个单独的变量。distance
是一个浮点,您不能将浮点设置为char*
是否有任何方法可以在不使用新变量的情况下转换距离变量
变量
在声明变量为int之后,您不能将其转换为另一种数据类型。您可以做的是将其声明为char*(string),然后当您想将其设置为类似于0的数字时,将该数字转换为字符串。如果您真的希望两者都有一个单独的变量。“有没有办法在不使用新变量的情况下转换距离变量?”您不需要转换它或使用另一个变量。不要更改距离,而是发送字符串:
void loop () {
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
distance = pulseIn(EchoPin,HIGH)/58.0; // divided by 58 to change into cm
// You don't need this check. pulseIn returns an unsigned long. It's always >= 0
/*if(distance < 0) {
distance = 0;
} */
if(distance > 400) {
Serial.println("Out of range");
return;
}
Serial.println(distance );
}
void循环(){
数字写入(TrigPin,低电平);
延迟微秒(2);
数字写入(TrigPin,高);
延迟微秒(10);
数字写入(TrigPin,低电平);
距离=pulseIn(EchoPin,高)/58.0;//除以58可转换为厘米
//您不需要此检查。pulseIn返回一个无符号的long。它总是>=0
/*如果(距离<0){
距离=0;
} */
如果(距离>400){
Serial.println(“超出范围”);
返回;
}
串行打印LN(距离);
}
与你的问题无关。您不需要检查距离是否为负值。返回一个无符号长字符
。它总是非负的。“有没有办法在不使用新变量的情况下转换距离变量?”您不需要转换它或使用其他变量。不要更改距离,而是发送字符串:
void loop () {
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
distance = pulseIn(EchoPin,HIGH)/58.0; // divided by 58 to change into cm
// You don't need this check. pulseIn returns an unsigned long. It's always >= 0
/*if(distance < 0) {
distance = 0;
} */
if(distance > 400) {
Serial.println("Out of range");
return;
}
Serial.println(distance );
}
void循环(){
数字写入(TrigPin,低电平);
延迟微秒(2);
数字写入(TrigPin,高);
延迟微秒(10);
数字写入(TrigPin,低电平);
距离=pulseIn(EchoPin,高)/58.0;//除以58可转换为厘米
//您不需要此检查。pulseIn返回一个无符号的long。它总是>=0
/*如果(距离<0){
距离=0;
} */
如果(距离>400){
Serial.println(“超出范围”);
返回;
}
串行打印LN(距离);
}
与你的问题无关。您不需要检查距离是否为负值。返回一个无符号长字符
。它总是非负的。在哪一行诊断该错误?如果您引用完整的错误,则会包括在内。在哪一行诊断该错误?如果你引用完整的错误,那就包括在内了。