Работа с кнопкой

Тема в разделе "Arduino & Shields", создана пользователем Baltika-9, 3 дек 2019 в 21:11.

  1. Baltika-9

    Baltika-9 Нуб

    Добрый вечер! Я вот только начал обучение и я захотел сделать код, по задумке которого кнопка переключала бы светодиоды ( один гаснет, другой загорается). И вот, я сделал код. Но увы в коде есть ошибка из-за которой кнопка не переключает на другой пин. То есть когда нажимаешь на кнопку она не переключает, переключить может только в том случае когда ее подержишь. И светодиод один горит изначально . Буду благодарен!
    Код (C++):
    #define btn 9
    int x = 2 ;
    void setup()
    {
    pinMode (btn , INPUT_PULLUP);
    pinMode (2 , OUTPUT);
    pinMode (3 , OUTPUT);
    Serial.begin(9600);
    }
    void loop()
    {
    Serial.println(x);
    digitalWrite(x, HIGH);
    digitalWrite(x + 1, LOW);
    digitalWrite(x - 1, LOW);

    if (digitalRead(btn) == 0)
    {
    x = x + 1 ;
    }

    if (x > 3)
    {
    x = 2 ;
    }

    }
     
    Последнее редактирование: 3 дек 2019 в 22:34
  2. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

  3. Baltika-9

    Baltika-9 Нуб

    Новореги тоже люди
     
  4. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    Новореги читают то, что их просят сверху страницы, то бишь почитать правила и пост про использования редактора
     
    Baltika-9 и Daniil нравится это.
  5. Daniil

    Daniil Гуру

    Надо написать алгоритм обработки нажатия. Для вас 1 сек долго, а 5, а 0.1? Выбрать тот интервал, который можно считать однократным нажатием.
    Если за выбранный интервал кнопка была нажата, то нужно переключать светодиоды.
    На мой взгляд, проще ввести 2 флага:
    1. Флаг текущего состояния светодиодов
    2. Флаг необходимости изменения состояния светодиодов, он же флаг нажатия кнопки.
     
    SergeiL и BAR__MEN нравится это.
  6. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    Да просто взять пример из вики и запихнуть туда три строки новые...
     
  7. ostrov

    ostrov Гуру

    Пина используется 3, а инитятся два. Уже это странно. И отсутствие элементарного делея, я уж молчу про миллис. Это за одно нажатие сколько раз х+1 сработает, Тысячу? Если бы не serial.print, то и миллион. Послушайте совета, пройдите все мини-проекты от Амперки, там делов на несколько дней. Все станет намного понятнее.
     
    Tomasina нравится это.
  8. SergeiL

    SergeiL Гуру

    Сначала нарисовать алгоритм. В виде блок-схемы.
    Начальные значения, и что будем делать после определения нажатий.
    Потом читаем про дребезг и добавляем код устраняющий этот дребезг.
    Понятно, что тем кто в теме - задача на пять минут.
    Но учитывая @Baltika-9 - дольше. :)
     
    Daniil и DetSimen нравится это.
  9. Airbus

    Airbus Радиохулиган Модератор

    Сорри-Дребезг кнопки)))
     
  10. b707

    b707 Гуру

    добавлю еще один косяк - выход за границы описанных пинов.
    пример, если х = 2 то х -1 это пин номер 1 - такой пин в программе не описан
    если х = 3. то в сво. очередь х+1 - это 4, такого пина тоже нет
     
    Andrey12 нравится это.