首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将串行监视器的变量更改为文本(Arduino Uno)

将串行监视器的变量更改为文本(Arduino Uno)
EN

Stack Overflow用户
提问于 2021-03-24 17:37:55
回答 2查看 75关注 0票数 0

我使用的是HC-SR04超声波传感器,它显示距离,有两个if语句,如果它低于0,它就会显示为0(该部分按预期工作),如果它超过4米(距离变量是1厘米),它应该显示“超出范围”,这就是我有问题的部分。下面是完整的代码

代码语言:javascript
运行
复制
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变量)。我是一个相当早期的初学者,所以解决方案可能非常简单,我只是不知道它。

EN

回答 2

Stack Overflow用户

发布于 2021-03-24 17:41:03

distance是浮点型,不能将浮点型设置为char *。

有没有办法不使用新的变量就能转换距离变量?

在将变量声明为int之后,您不能将其转换为另一种数据类型。您可以做的是将其声明为char *(字符串),然后当您想要将其设置为像0这样的数字时,将该数字转换为字符串。也就是说,如果您真的想为这两个变量都使用一个变量。

票数 0
EN

Stack Overflow用户

发布于 2021-03-24 17:45:47

“有没有办法不使用新变量就能转换距离变量?”您不需要转换它或使用另一个变量。不要更改distance,而是发送一个字符串:

代码语言:javascript
运行
复制
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。它总是非负的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66778290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档