Ви не увійшли.
Здравствуйте, помогите со скетчем нескольких датчиков ультразвука, один работает нормально, добавляю еще два начинает щелкать реле через равные промежутки времени
#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);
}
Неактивний
Проводите стробирование и измерения датчиков последовательно, т.е. по очереди. Не стробируйте все датчики одновременно.
Неактивний
А можно подробнее, как это реализовать в коде?
Функция pulseIn(..) задерживает выполнение на длительность измеряемого импульса и посде этого возврашает результат. Пока вы измеряете длительность импульса одного датчика, импульсы остальных оказываются потерянными. Если вы поймете суть процесса то реализовать в коде сможете и сами.
Неактивний