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 безрезультатно. Любые советы приветствуются.
@Mathew Gonzalez, 👍-1
2 ответа
pulseIn() возвращает unsigned long
, и вы объявили переменную "duration" как float
. Я не уверен, что это все исправит, но попробуйте.
Здесь есть несколько проблем.
Наиболее очевидным является то, что вы используете неправильные контакты. На Ардуино
Uno, цифровой 0 — это последовательный вывод RX, а цифровой 1 — TX. Таким образом, если вы
используйте Serial
в своем скетче, вы не можете использовать эти контакты ни для чего
другое.
На более фундаментальном уровне, судя по вашей фотографии, у вас есть
подключил Arduino к паре голых пьезопреобразователей. Ваш код,
с другой стороны, предполагается, что Arduino подключен к цифровому гидролокатору.
модуль, такой как очень распространенный HC-SR04. Вы должны иметь в виду, что
пьезопреобразователь является аналоговым устройством. Сонарный модуль, с другой
рука содержит довольно много электронных частей, которые заботятся о
преобразование аналоговых сигналов и обеспечение простого в использовании цифрового
интерфейс, где вам просто нужно вызвать pulseIn()
, чтобы получить
измерения.
Если вы хотите использовать простые пьезопреобразователи, первое, что у вас есть нужно прочитать их техническое описание. Это действительно важно. Как только у вас есть прочитав (и поняв) этот документ, вы сможете понять, вам нужна электроника интерфейса между пьезоэлементами и вашим Arduino. Может быть, вам сойдет с рук возбуждение передатчика с помощью ШИМ и чтение приемника с помощью встроенного АЦП. А может и нет. Сначала прочтите техническое описание, затем спроектируйте свою схему, затем проверьте, используя область, чтобы посмотреть на ваши сигналы.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
За исключением некоторых возможных крошечных ошибок округления, назначение «unsigned long» «float» всегда безопасно., @Edgar Bonet