Прерывания

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

  1. tizzer

    tizzer Нуб

    Нужен совет: использую прерывание по кнопке (кнопку включил, робот поехал в обратную сторону), само прерывание организовал с помощью установления флага (т.е. если кнопка была нажата флаг меняет значение false на true) далее начинает работать цикл в loop (т.е. если флаг true выполняются команды смены с + на - и колеса крутятся назад определенное время далее флаг сменяется на false и прерывание заканчивается)

    Сам вопрос: нужно ли убирать дребезг кнопки или в прерываниях этого делать не нужно, вроде сбоев программы пока не наблюдал.

    Второй вопрос: как отладить программу, пытался делать так: Serial.begin(9600); ставил в void setup(), а вот куда вставлять (например в саму функцию прерывания или в цикл, который срабатывает при значении флага true)
    int buttonState = digitalRead(Button); // считывание значения кнопки
    Serial.println(buttonState, DEC); // вывод значения на экран в десятичном виде
    delay(200); ожидание 200мс

    Извините за столь длинные вопросы, долго уже ковыряюсь над этими вопросами...
     
  2. ostrov

    ostrov Гуру

    Антидребезг нужен если функция которая на него реагирует короче чем переключения дребезга. То есть если система ждет нажатия кнопки, после чего полчаса крутит колеса, то антидребезг не нужен. Но может быть нужна антипомеха, которая по сути похожа, но ловит другие ошибки.
     
    arkadyf, Sparkfire и tizzer нравится это.
  3. mcureenab

    mcureenab Гуру

    Если по прерыванию флаг только поднимается, то сбросить его можно только после успокоения дребезга, иначе прерывание повторится и флаг снова поднимется.
    Однако, функция может быть нечувствительной к повторным срабатываниям. В вашем случае, первое срабатывание меняет + на -. Второе и последующие - на -. По сути ничего не делают.

    Если бы функция меняла знак на обратный, результат был-бы непредсказуемым.
     
    arkadyf нравится это.