#1 2018-10-21 20:36:30

satori
Учасник
Зареєстрований: 2018-10-21
Повідомлень: 3

Помогите, несколько Ultrasonic датчиков

Здравствуйте, помогите со скетчем нескольких датчиков ультразвука, один работает нормально, добавляю еще два начинает щелкать реле через равные промежутки времени

#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);
   }

Неактивний

#2 2018-10-21 20:56:26

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите, несколько Ultrasonic датчиков

Проводите стробирование и измерения датчиков последовательно, т.е. по очереди. Не стробируйте все датчики одновременно.

Неактивний

#3 2018-10-21 21:03:15

satori
Учасник
Зареєстрований: 2018-10-21
Повідомлень: 3

Re: Помогите, несколько Ultrasonic датчиков

А можно подробнее, как это реализовать в коде?

Неактивний

#4 2018-10-21 21:43:18

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Помогите, несколько Ultrasonic датчиков

satori пише:

А можно подробнее, как это реализовать в коде?

Функция pulseIn(..) задерживает выполнение на длительность измеряемого импульса и посде этого возврашает результат. Пока вы измеряете длительность импульса одного датчика, импульсы остальных оказываются потерянными. Если вы поймете суть процесса то реализовать в коде сможете и сами.

Неактивний

#5 2018-10-22 10:55:06

kensho
Гість

Re: Помогите, несколько Ultrasonic датчиков

satori пише:

А можно подробнее, как это реализовать в коде?

...

#6 2018-10-22 13:18:53

satori
Учасник
Зареєстрований: 2018-10-21
Повідомлень: 3

Re: Помогите, несколько Ultrasonic датчиков

Спасибо. Получилось

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму