Ultrasonic Подскажите как сделать проверку.

Тема в разделе "Флудилка", создана пользователем Larry77, 9 июн 2016.

  1. Larry77

    Larry77 Нуб

    Приветствую.
    Изначально было сделано вот так:
    Код (C++):
    if (distance_sm>115&&distance_sm<125) //если расстояние от 115см. до 125см. то выключить
    {
    digitalWrite(rele1, 0);
    }
    else
    {
    digitalWrite(rele1, 1);
    delay(5000);
    }
    Иногда "выпадает человек" или приходят не верные расстояния. Отключается свет(моргает).

    как сделать проверку? например если расстояние равно if то проверить это еще 2-3 раза

    дали подсказку:
    Код (C++):

    byte counter = 0;     // счетчик измерений
    byte maxCounter = 10;  // количество измерений
    for (byte i = 0; i < maxCounter; i++)      // несколько раз измеряем расстояние
    {
      if (0 == distance_sm) Serial.print("\tSONAR NOT DETECTED!");
      else Serial.print(dist);
      Serial.print(", ");
      if (distance_sm > 115 && distance_sm < 125) counter++;  // если расстояние от 115см. до 125см, то плюсуем счетчик
      delay(200);
    }
    Serial.println();
    if (maxCounter == counter && distance_sm > 0) // если число срабатываний равно числу попыток, то выключить
    {
      digitalWrite(rele1, LOW);
    }
    else
    {
      digitalWrite(rele1, HIGH);
      delay(5000);
    }
     
    то есть снятия показаний несколько раз, но в этом случае приходят следующие данные:
    Код (Text):
    379
    379, 379, 379, 379, 379, 379, 379, 379, 379, 379,
    165
    165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
    167
    167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
    233
    233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
    как я понимаю снятия показаний делаются почти мгновенно без паузы как я бы хотел).

    Суть затеи в том что когда показание расстояния между 115см и 125см делалась проверка еще раз через 1-5 секунд и если последовательность положительных проверок достигла 3-5 раз подряд то выключаем реле. а если между ними было <115см и >125см то повторять проверку сначала.
    Спасибо.
     
  2. ostrov

    ostrov Гуру

    В цикле нет нескольких измерений, одна и та же переменная мусолится несколько раз. Странно, что вы не заметили это по результатам которые сами же привели.
     
  3. ZAZ-965

    ZAZ-965 Гуру

    А что за точность такая? Человек должен остановиться напротив чего-то?
     
  4. Larry77

    Larry77 Нуб

    менее 115 кто то вошел, более 125 открыта дверь )
     
  5. ZAZ-965

    ZAZ-965 Гуру

    Как уже было сказано, в цикле нет измерений
    Код (C++):

    for (byte i = 0; i < maxCounter; i++)      // несколько раз измеряем расстояние
    {
      distance_sm = ultraleft.Ranging(CM);  //[B]измеряем расстояние[/B]
      if (0 == distance_sm) Serial.print("\tSONAR NOT DETECTED!");