Самопроизвольная перезагрузка Arduino (nano и uno)
- Войдите на сайт для отправки комментариев
Добрый день.
Прошу помощи, совсем недавно начал изучать ардуино.
Пишу код простой для автоматического обьезда препятствий машинки с помощью ульразвукового датчика hc sr04. Управление машинкой через контролер ps2. Датчик подключен к пинам А4 А5. ПС2 к пинам А0-А3.
Для включения режима автопилота добавил флажок, который меняет свое значение по нажатию кнопки start, что в дальнейшем запускает условие с запуском датчика ультразвука.
И вот тут столкнулся с проблемой, код просто замера выполняется отлично, но как только срабатывает условие что значение distance<10 происходит сбой, внутреняя часть кода выполниться 1 раз после чего ардуино уходит в сброс и требуется по новой запускать режим автопилота. Иногда код может выполнить 2-5 раз но такое случается редко. Если убрать внутреннюю часть условия на вообще одну строку, может сработать 5-6 раз, но потом ардуинка опять выходит в сброс. Это происходит на 2 разных ардуино и уно и нано.
Пробывал главное условие if заменить на цикл while (flag == true) и он работает отлично, за исключением невозможности выхода из него, я просто не знаю как прекратить его по нажатию кнопки. Он не воспринимает нажатие кнопок геймпада в цикле, для смены значения flag.
Я прошу прощения за возможно глупый код и простой вопрос, но пытался по разному и не смог.
Ниже часть кода именно автопилотной части просто с текстовой прогонкой.
// КОД РАБОТЫ АВТОПИЛОТА ПО УЛЬТРАЗВУКУ if (ps2x.ButtonPressed(PSB_START)) { flag = !flag; } delay(100); if (flag == true) { unsigned int distance = sonar.ping_cm(); delay(50); Serial.print(distance); Serial.println("см"); if (ps2x.ButtonPressed(PSB_SELECT)) { flag = !flag; Serial.println("нажат флаг"); } if (distance<10){ Serial.println("стоп"); delay(200); Serial.println("повернул налево"); delay(400); Serial.println("повернул направо"); delay(800); } }
Выкладывай весь код.
Разобрался сам, заменил условие на цикл while и добавил чтение геймпада в данный цикл. Все заработало. Оставлю код тут, может кому пригодиться.
вряд ли этот код кому-то интересен, лучше скажите - разобрались почему зависало-то?