Ви не увійшли.
Спасибо. Получилось
А можно подробнее, как это реализовать в коде?
А можно подробнее, как это реализовать в коде?
Функция pulseIn(..) задерживает выполнение на длительность измеряемого импульса и посде этого возврашает результат. Пока вы измеряете длительность импульса одного датчика, импульсы остальных оказываются потерянными. Если вы поймете суть процесса то реализовать в коде сможете и сами.
А можно подробнее, как это реализовать в коде?
Проводите стробирование и измерения датчиков последовательно, т.е. по очереди. Не стробируйте все датчики одновременно.
Здравствуйте, помогите со скетчем нескольких датчиков ультразвука, один работает нормально, добавляю еще два начинает щелкать реле через равные промежутки времени
#include <Ultrasonic.h>
// #define Trig 9
// #define Echo 8
#define trigPin1 9
#define echoPin1 8
#define trigPin2 11
#define echoPin2 10
#define trigPin3 13
#define echoPin3 12
#define releyPin2 4
void setup()
{
pinMode(trigPin1, OUTPUT); //инициируем как выход
pinMode(echoPin1, INPUT); //инициируем как вход
pinMode(trigPin2, OUTPUT); //инициируем как выход
pinMode(echoPin2, INPUT); //инициируем как вход
pinMode(trigPin3, OUTPUT); //инициируем как выход
pinMode(echoPin3, INPUT); //инициируем как вход
pinMode(releyPin2, OUTPUT);
Serial.begin(9600);
/* задаем скорость общения. В нашем случае с компьютером */
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop()
{
digitalWrite(trigPin1, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(trigPin2, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(trigPin3, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(trigPin1, LOW); // Отключаем
impulseTime=pulseIn(echoPin1, HIGH); // Замеряем длину импульса
digitalWrite(trigPin2, LOW); // Отключаем
impulseTime=pulseIn(echoPin2, HIGH); // Замеряем длину импульса
digitalWrite(trigPin3, LOW); // Отключаем
impulseTime=pulseIn(echoPin3, HIGH); // Замеряем длину импульса
digitalWrite(trigPin3, LOW); // Отключаем
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт
if (distance_sm<20) // Если расстояние менее 30 сантиметром
{
digitalWrite(releyPin2, LOW); // Светодиод горит
delay(200);
digitalWrite(releyPin2, HIGH);
}
else
{
digitalWrite(releyPin2, HIGH); // иначе не горит
}
delay(5000);
}