问题描述
我使用的是显示距离的 HC-SR04 超声波传感器,有两个 if 语句,如果低于 0,则显示为 0(该部分按预期工作),如果超过 4 米(距离变量为一厘米) )它应该说“超出范围”,这就是我遇到问题的部分。这是完整的代码
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 char [13]' 转换为 'float'”(第 26 行),有没有办法在不使用新变量的情况下转换距离变量? (距离变量已经有另一个 if 语句)。我是这方面的初级初学者,所以解决方案可能非常简单,我只是不知道。
解决方法
distance
是浮点数,不能将浮点数设置为字符 *。
有没有办法在不使用新的变量的情况下转换距离变量 变量?
好吧,在将变量声明为 int 之后,您无法将其转换为另一种数据类型。您可以做的是将其声明为 char * (string),然后当您想将其设置为 0 之类的数字时,将该数字转换为字符串。也就是说,如果您真的想为两者都使用一个变量。
,“有没有办法在不使用新变量的情况下转换距离变量?”您不需要转换它或使用另一个变量。不要更改 distance
而是发送字符串:
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 );
}
与您的问题无关。您无需检查 distance
是否为负数。 pulseIn 返回 unsigned long
。它总是非负的。