pulseIn возвращает только 0

Я новичок в arduino, просмотрел множество сообщений, но не нашел ничего, что могло бы решить проблему.

Я пытаюсь отправить сигнал через некоторую среду (в данном примере воду) с помощью пьезоэлектрического преобразователя и измерить время, необходимое для прохождения сигнала от преобразователя к другому.

Прилагается изображение установки. Ниже приведен код.

const int trigPin = 1;
const int echoPin = 0;
float duration;

void setup() {
  pinMode (trigPin, OUTPUT);
  pinMode (echoPin, INPUT);
  Serial.begin (9600);
}

void loop() {
  // установить передающий контакт на низкий уровень
  digitalWrite (trigPin, LOW);
  delayMicroseconds (2);

  // посылаем сигнал
  digitalWrite(trigPin, HIGH);
  digitalWrite (trigPin, LOW);

  // считываем сигнал при получении пина, выводим продолжительность в Монитор
  duration = pulseIn (echoPin, HIGH);
  Serial.print("duration: ");
  Serial.print(duration);
  Serial.print("\n");
}

Проблема в том, что переменная "duration" была равна 0 во всех моих тестах. Я пытался использовать различные значения для параметра тайм-аута в pulsIn безрезультатно. Любые советы приветствуются.

, 👍-1


2 ответа


0

pulseIn() возвращает unsigned long, и вы объявили переменную "duration" как float. Я не уверен, что это все исправит, но попробуйте.

,

За исключением некоторых возможных крошечных ошибок округления, назначение «unsigned long» «float» всегда безопасно., @Edgar Bonet


0

Здесь есть несколько проблем.

Наиболее очевидным является то, что вы используете неправильные контакты. На Ардуино Uno, цифровой 0 — это последовательный вывод RX, а цифровой 1 — TX. Таким образом, если вы используйте Serial в своем скетче, вы не можете использовать эти контакты ни для чего другое.

На более фундаментальном уровне, судя по вашей фотографии, у вас есть подключил Arduino к паре голых пьезопреобразователей. Ваш код, с другой стороны, предполагается, что Arduino подключен к цифровому гидролокатору. модуль, такой как очень распространенный HC-SR04. Вы должны иметь в виду, что пьезопреобразователь является аналоговым устройством. Сонарный модуль, с другой рука содержит довольно много электронных частей, которые заботятся о преобразование аналоговых сигналов и обеспечение простого в использовании цифрового интерфейс, где вам просто нужно вызвать pulseIn(), чтобы получить измерения.

Если вы хотите использовать простые пьезопреобразователи, первое, что у вас есть нужно прочитать их техническое описание. Это действительно важно. Как только у вас есть прочитав (и поняв) этот документ, вы сможете понять, вам нужна электроника интерфейса между пьезоэлементами и вашим Arduino. Может быть, вам сойдет с рук возбуждение передатчика с помощью ШИМ и чтение приемника с помощью встроенного АЦП. А может и нет. Сначала прочтите техническое описание, затем спроектируйте свою схему, затем проверьте, используя область, чтобы посмотреть на ваши сигналы.

,