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

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


person Bon Wattersen    schedule 24.03.2021    source источник
comment
В какой строке диагностируется эта ошибка? Если вы процитируете полную ошибку, она будет включена.   -  person underscore_d    schedule 24.03.2021


Ответы (2)


distance - это число с плавающей запятой, вы не можете установить число с плавающей запятой в char *.

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

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

person Silidrone    schedule 24.03.2021

Есть ли способ преобразовать переменную расстояния без использования новой переменной? Вам не нужно преобразовывать ее или использовать другую переменную. Не меняйте 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. Он всегда неотрицательный.

person Community    schedule 24.03.2021