ультразвуковой датчик HC-SR04 не работает
- Войдите на сайт для отправки комментариев
Чт, 12/07/2018 - 21:48
Скетч на два татчика их проверял исправны но когда скетч работает один показывает нормальное значение а другой 0. Помогите пожалуйста.
программа если что на ардуино леонардо
#include "Keyboard.h" #include <Keyboard.h> #include <HID.h> //Sensor 1 int trigPin1 = 2; int echoPin1 = 3; //Sensor 2 int trigPin2 = 4; int echoPin2 = 5; long duration1, cm1; long duration2, cm2; //Status variables int value1; int value2; void setup() { Serial.begin(9600); Keyboard.begin(); pinMode(trigPin1, OUTPUT); pinMode(echoPin1, INPUT); pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT); } void loop() { digitalWrite(trigPin1, LOW); delayMicroseconds(5); digitalWrite(trigPin1, HIGH); delayMicroseconds(10); digitalWrite(trigPin1, LOW); pinMode(echoPin1, INPUT); duration1 = pulseIn(echoPin1, HIGH); // convert the time into a distance cm1 = (duration1 / 2) / 29.1; digitalWrite(trigPin2, LOW); delayMicroseconds(5); digitalWrite(trigPin2, HIGH); delayMicroseconds(10); digitalWrite(trigPin2, LOW); pinMode(echoPin2, INPUT); duration2 = pulseIn(echoPin2, HIGH); // convert the time into a distance cm2 = (duration2 / 2) / 29.1; delay(300); Serial.println(cm1); Serial.println(cm2); //set value 1 true if (cm1 < 10) { value1 = 1; delay(100); } if (cm2 < 10 && value1 == 1) { value1 = 0; goLeft(); delay(100); } //set value 2 true if (cm2 < 10) { value2 = 1; delay(100); } if (cm1 < 10 && value2 == 1) { value2 = 0; goRight(); delay(100); } } int goLeft() { Serial.println("Im left"); Keyboard.print("ktdj"); Keyboard.write(KEY_RETURN); delay(100); } void goRight() { Serial.println("Im right"); Keyboard.print("ghfdj"); Keyboard.write(KEY_RETURN); delay(100); }
Между свистками датчика нужно выдерживать определенную паузу. Вроде 50мс что ли... Для теста махните их местами.
Я менял их местами, единственное что оживляет второй датчик это плохой контакт на echo пине. Можете показать где именно в коде поставить эту паузу
Зачем Вам это строки 34, 35,45,46 ? они не нужны.
Если у вас контакты не контачат, никакой патч к коду ситуации не изменит.
они контачат, дело в том что датчик оживает, наоборот только от плохого контакта
Перед вторым свистом вставьте delay. Надеюсь, что вы можете найти это место в своем скетче.
Если меняли местами и конкретный датчик глючит - смотрите тут поиском были темы про какое-то то ли усовершенствование от китайцев, то ли брак .. в общем вопрос уже обсуждался. Какое-то решение там было найдено..
Если меняли местами и конкретный датчик глючит - смотрите тут поиском были темы про какое-то то ли усовершенствование от китайцев, то ли брак .. в общем вопрос уже обсуждался. Какое-то решение там было найдено..
Тут не про датчики, тут про способ измерения: второй датчик сразу после включения ловит эхо от первого, поэтому показывает расстояние 0.
Может быть, не вникал шибко. В таком разе стоит разнести моменты замеров (особенно свистки) на около 40мсек. Этого достаточно чтобы эхо стало ниже порога срабатывания.
Или наоборот. Свистеть одновременно и слушать тоже. Удобно реализовать по прерываниям, и измеряемая точность может быть достигнута до 2мм на дистанциях под 5м.