Измените переменную на текст для последовательного монитора (Arduino Uno)

#c #arduino-uno #arduino-ultra-sonic #serial-monitor

Вопрос:

Я использую ультразвуковой датчик 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). Я довольно рано начинаю в этом, так что решение может быть чрезвычайно простым, и я просто этого не знаю.

Комментарии:

1. На какой строке диагностируется эта ошибка? Если вы укажете полную ошибку, это будет включено.

Ответ №1:

distance является поплавком, вы не можете установить поплавок в символ *.

есть ли какой-либо способ преобразовать переменную расстояния без использования новой переменной?

Ну, вы не можете преобразовать переменную в другой тип данных после того, как вы объявили ее int. Что вы можете сделать, так это объявить его символом * (строка), а затем, когда вы захотите установить для него значение, например 0, преобразовать число в строку. Это если вы действительно хотите иметь одну переменную для обоих.

Ответ №2:

«есть ли какой-либо способ преобразовать переменную расстояния без использования новой переменной?» Вам не нужно преобразовывать ее или использовать другую переменную. Не меняйте 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 это отрицательным. Пульсейн возвращает an unsigned long . Это всегда неотрицательно.