Дребезг контактов или фигня с переменной++


И так код

  if(digitalRead(11)==HIGH)
   {
     menu--;
   }
  if(digitalRead(9)==HIGH)
   {
     menu++;
   }

Он выполняется, но нажатие на кнопку выполняет каждое действие два раза. То есть выполнение условий menu надо писать нечётные: 1 , 3 ,6 , 9 , 12……
Так что с этим делать? Кнопки подтянуты к земле резистором на 4,7 ком


3 комментария на «“Дребезг контактов или фигня с переменной++”»

  1. На кнопку сложнее код нужен. Если вы нажмете кнопку, и на pin11 к примеру будет HIGH, то каждый цикл программа будет добовлять по 1. Для меню это удобно, но тогда надо задержку добавить. Я бы наверное сделал так.

    {
    if(digitalRead(11)==HIGH)
         menu--;
        Delay(400);
       }
      if(digitalRead(9)==HIGH)
       {
         menu++;
       Delay(400);
       }

    Но по-хорошему я бы изменил, чтобы программа видела нажатую кнопку.
    Если грубо, и важно, чтобы программа видела только одно нажатие, то код такой:

    {
    if(digitalRead(11)==HIGH)
         menu--;
        While (digitalRead(11)==HIGH); //Пока кнопка нажата, программа дальше не пойдет
       }
      if(digitalRead(9)==HIGH)
       {
         menu++;
       While (digitalRead(9)==HIGH);
       }

    Этот код может работать неправильно для некоторых задач, т.к. проц занят, программа не работает во время нажатия кнопки.

    • Я в своей программе всё равно использовал таймер (библиотека TimerOne), поэтому просто добавил в него отсчёт 100 миллисекунд.
      При нажатии кнопки, помимо прочего, устанавливается флаг неактивности клавиатуры, т.е. пока флаг установлен — нажатие кнопок не обрабатывается.
      Через 100 мс таймер сбрасывает флаг и всё работает, как обычно.

      Благодаря использованию таймера программа не тормозится, всего лишь добавляется несколько сравнений.
      Если нужен код — добавлю позже)

    • Полностью согласен. Флаги полностью избавляют от необходимости «ожидать». Сам ими пользуюсь.
      О такой библиотеке не знал почему-то) Спасибо. Я с ардуино совсем недавно вместе =)

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение