Подскажите с кодом. С тем, который выделен зеленым. Мне нужно, чтобы сигнал с датчика дошел до Ардуино в тот момент, когда работает гудок. А работает он каждый раз немного по-разному. Какая логика работы if (digitalRead) - он будет ждать некоторое время, пока не получит сигнал? Или будет ждать до следующей команды? Или можно задать время ожидания?

Комментарии: 11

  1. Malformed

    Не ждёт

    • Aleksandr

      Гудок включается по такой схеме : есть реле, которое подает питания на кондер через резистор, а тот разряжается на катушку другого реле, и уже оно питает гудок пока кондер разряжается на его обмотку. Милисекунды и части секунды там гуляют. Как я понимаю, if (digitalRead) производит замер ПРЯМО СЕЙЧАС, но ведь какой-то диапазон допуска должен быть?

      • Kaktys

        Никакого нет

        • Aleksandr

          Так написал же чтобы проверяло. Только не пойму, в какое время оно будет проверять ( На остальной код вроде можно не ставить - после } else { будет вызвана функция которая будет верещать в течении часа. Плюс повторить проверку таким же образом, в т.ч. для других датчиков нужно будет много раз. Ааа, слушай. Кажется понял - эта команда начинает ждать с текущего момента и до конца цикла. Тогда выходит, что нужно ограничить время исполнения команды ожидания, и добавить, что если не уложилось - то это ошибка.

  2. Ratmir

    В самом верху метода проверяй наличие питания и пина гудка и если его нет, то ставь else на остальной код

  3. Evgeniy

    А тебя не смущает что ардуина по 13 секунд в носу ковыряет?

    • Aleksandr

      Нет - это напрямую связано с тем, что устройство на которое подаю сигналы медленно работает.

      • Evgeniy

        То что устройство работает медленно не страшно Если ардуине в эти 13 секунд "прилетает сообщение" - ардуина курит бамбук и релаксирует... Не может ли быть так: в начале раскурки сигнал с устройства есть, а к окончанию уже пропадает?

        • Aleksandr

          Мне порекомендовали использовать прерывания. Когда доберусь до работы и выпью кофе, посмотрю что это такое. Якобы можно сделать так, чтобы Ардуина ждала сигнал несколько секунд, как только он появится программа пойдет дальшеч а если не появится - выполнится функция ошибки.

          • Evgeniy

            Ну если порекомендовали =) читай, но прерывание это прерывание, а не ожидание в любом случае от "курения бамбука" надо избавляться

            • Aleksandr

              Да, но конкретно с этим кодом он уживается. Кроме замера обратной связи, ардуине просто нечего делать, пока подключаемое устройство "думает"

Не нашли ответ?

Вам также может быть интересно