Почему эта переменная всегда возвращает мне значение 0?

Я работаю над проектом, и вот код, который я использую, но я не знаю, почему значения продолжительности и софии всегда равны 0, поэтому значения расстояния и монроя также равны 0

const int trigPin = 9;
const int echoPin = 10;

const int t = 8;
const int e = 7;

long duration, sofia;
int distance, monroy;
void setup() {
  pinMode(trigPin, OUTPUT); // Устанавливает trigPin как выход
  pinMode(echoPin, INPUT); // Устанавливает echoPin как вход
  pinMode(t, OUTPUT);
  pinMode (e, INPUT);
  Serial.begin(9600); // Запускает последовательную связь
}
void loop() {
  // Очищает тригПин
  digitalWrite(trigPin, LOW);
  digitalWrite (t, LOW);
  delayMicroseconds(2);
  // Устанавливает trigPin в состояние HIGH на 10 микросекунд
  digitalWrite(trigPin, HIGH);
  digitalWrite (t, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  digitalWrite (t, LOW);
  // Считывает echoPin, возвращает время прохождения звуковой волны в микросекундах
  duration = pulseIn(echoPin, HIGH);
  sofia = pulseIn(e, HIGH);
  // Расчет расстояния
  distance = duration * 0.034 / 2;
  monroy = sofia * 0.034 / 2;
  Serial.print(duration);
  if (distance = 15);
  {
    digitalWrite (3, HIGH);
    delay (5000);
    digitalWrite (3, LOW);
  }

  if ((monroy >= 0) && (monroy <= 5));
  {
    digitalWrite (4, HIGH);
    digitalWrite (5, LOW);
    digitalWrite (6, LOW);
  }
  if ((monroy >= 5.1) && (monroy <= 9));
  {

    digitalWrite (5, HIGH);
    digitalWrite (6, LOW);
  }
  if (monroy >= 9.1);
  {

    digitalWrite (5, LOW);
    digitalWrite (6, HIGH);
  }
}

, 👍0

Обсуждение

подключен ли у вас Arduino к чему-либо?, @jsotola

Мой Arduino подключен к моему ноутбуку., @mmiguell

Что у вас подключено к контактам 9 и 10 вашего Arduino? Возможно, вам будет полезна эта статья на нашем метасайте: [Как задать хороший вопрос для Arduino Stack Exchange](https://arduino.meta.stackexchange.com/questions/2523/how-to-ask-a-good-question-for-arduino-stack-exchange), @sempaiscuba

К 9-му и 10-му контактам у меня подключены контакты эха и триггера. Спасибо!, @mmiguell

Пожалуйста, сделайте последовательную печать sofia, чтобы мы могли увидеть, какое значение используется для последующего расчета., @Nick Gammon

когда я пишу Serial.print(sofia), он всегда печатает 0, @mmiguell

Похоже, в этом случае время ожидания истекает через секунду. См.: https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/, @Nick Gammon

Что подключено к контакту 7?, @Nick Gammon


1 ответ


4

Когда я отформатировал ваш код для удобства чтения, а затем скомпилировал его, я получил следующие предупреждения:

/tmp/arduino_modified_sketch_71221/sketch_may02a.ino: In function 'void loop()':
/tmp/arduino_modified_sketch_71221/sketch_may02a.ino:34:20: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   if (distance = 15);
                    ^
/tmp/arduino_modified_sketch_71221/sketch_may02a.ino:34:21: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
   if (distance = 15);
                     ^
/tmp/arduino_modified_sketch_71221/sketch_may02a.ino:41:38: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
   if ((monroy >= 0) && (monroy <= 5));
                                      ^
/tmp/arduino_modified_sketch_71221/sketch_may02a.ino:47:40: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
   if ((monroy >= 5.1) && (monroy <= 9));
                                        ^
/tmp/arduino_modified_sketch_71221/sketch_may02a.ino:53:21: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
   if (monroy >= 9.1);

Это важно — на это стоит обратить внимание. Например, вот здесь:

  if (distance = 15);  // <-- ТОЧКА С ЗАПЯТОЙ ЗДЕСЬ НЕ НУЖНА!
  {
    digitalWrite (3, HIGH);
    delay (5000);
    digitalWrite (3, LOW);
  }

Установка точки с запятой здесь означает, что содержимое под if всегда выполняется — точка с запятой завершает область действия if.


Чтобы просмотреть предупреждения, откройте диалоговое окно «Настройки» в графическом интерфейсе IDE и измените «Предупреждения компилятора» на «Все».


Также:

  if (distance = 15);

Это присваивает расстоянию значение 15, поэтому расстояние всегда будет равно 15. Вы имеете в виду:

  if (distance == 15)
,