hc-sr04 Помогите найти ошибку лузеру, не работает реле по заданному растоянию

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем vit373, 7 май 2018.

  1. vit373

    vit373 Нуб

    #include <NewPing.h>

    #define PIN_TRIG 8
    #define PIN_ECHO 9
    #define RELAY 7

    #define MAX_DISTANCE 400

    NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCE);

    void setup() {

    Serial.begin(9600);
    pinMode(7, OUTPUT);
    }

    void loop() {
    int duration, cm;

    delay(650);

    unsigned int distance = sonar.ping_cm();
    if (cm > 90)
    digitalWrite(7, LOW);
    else
    digitalWrite(7, HIGH);

    // Печатаем расстояние в мониторе порта
    Serial.print(distance);
    Serial.println("см");

    }
     
  2. Daniil

    Daniil Гуру

    чему равна переменная cm?
    код вставьте по-нормальному, пожалуйста, и откоментируйте его. Не все могут понять что вы хотите сделать читая код.
    Для отладки своих программ отправляйте в послед. порт метки, где сейчас исполняется код.
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Что Вы сравниваете с 90?Что у Вас duration что cm и что distance?Жуть какая то.Вот так надо
    Код (C++):

    #define Trig 9
    #define Echo 8
    #define ledPin 13

    void setup()
    {
      pinMode(Trig, OUTPUT); //инициируем как выход
      pinMode(Echo, INPUT); //инициируем как вход
      pinMode(ledPin, OUTPUT);
      Serial.begin(9600);
      /* задаем скорость общения. В нашем случае с компьютером */
    }
    unsigned int impulseTime=0;
    unsigned int distance_sm=0;

    void loop()
    {
      digitalWrite(Trig, HIGH);
      /* Подаем импульс на вход trig дальномера */
      delayMicroseconds(10); // равный 10 микросекундам
      digitalWrite(Trig, LOW); // Отключаем
      impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
      distance_sm=impulseTime/58; // Пересчитываем в сантиметры
      Serial.println(distance_sm); // Выводим на порт
      if (distance_sm<30) // Если расстояние менее 30 сантиметром
      {  
        digitalWrite(ledPin, HIGH); // Светодиод горит
      }
      else
      {
        digitalWrite(ledPin, LOW); // иначе не горит
      }
      delay(100);
      /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего.
       Это время называется периодом цикла (cycle period).
       Рекомендованный период между импульсами должен быть не менее 50 мс.  */

    }
     
    Последнее редактирование: 7 май 2018
  4. Sergey_BG

    Sergey_BG Нерд

    Я не знаю, что вы хотели, но наверное это, так как cm не инициализирована.
    Код (C++):
    // Считать дистанцию
    unsigned int distance = sonar.ping_cm();

    // Проверить на 90.
    if (distance > 90)
     
    atompost и Airbus нравится это.