ультразвуковой датчик 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м.