Подскажите новичку

Тема в разделе "Arduino & Shields", создана пользователем tizzer, 8 фев 2017.

  1. tizzer

    tizzer Нуб

    Хочу научить своего робота поворачивать при столкновении препятствия и контактного бампера, разворот программирую через прерывания. Мой код: [​IMG]
    вопрос: как в прерывании заставить поворачивать робот определенное время, в моем коде робот после срабатывания левого контактного бампера, робот просто начинает разворот и продолжает его бесконечно. пробовал delay(2000); потом смена контактов колес на обратные, но не работает, хотя выше delay для устранения дребезга срабатывает.
    Заранее спасибо за ответы, прошу сильно тапками не кидать, начинающий я =)
     
  2. rkit

    rkit Гуру

    Нельзя в прерываниях delay использовать.
     
  3. tizzer

    tizzer Нуб

    так оно и есть, из этого вытекает вопрос: как отсчитывать время в самом прерывании или заставить крутиться колеса определенно кол-во оборотов
     
  4. rkit

    rkit Гуру

    Не отсчитывать. Прерывание должно завершиться максимально быстро. Вся работа должна происходить в loop. Если надо, то в прерывании устанавливаете переменные, которые loop обрабатывает.
     
    tizzer нравится это.
  5. Onkel

    Onkel Гуру

    вы взводите в прерывании флаг (переменную), а в loop() Отрабатывайте функцию поворота, обнуляя переменную (флаг) когда поворот будет завершен.
     
    tizzer нравится это.
  6. tizzer

    tizzer Нуб

    т.е. вся суть: в прерывании устанавливаю переменную (из моего примера: bumperleft_state), а весь код реализую в loop
     
  7. tizzer

    tizzer Нуб

    обнуление будет автоматически по завершению кода в loop?