Подключение кнопки к Arduino

Изначально собирался написать статью о фильтрации дребезга кнопки, подключенной к контроллеру Arduino при помощи конденсатора, в результате у меня самого дребезга так и не получилось, а получилось стопроцентное срабатывание кнопки, какой она должна быть в идеале. При этом не пришлось задействовать ни конденсаторов, ни программных фильтров - всё и так прекрасно работает.

В интернете блуждает множество схем подключения кнопок к дискретным входам Arduino. На них чаще всего предлагается кнопку соединить с нулём питания и дискретным входом, к которому ещё подвести резистор 10 кОм, соединенный с плюсом питания 5 В. Этот резистор позволяет контроллеру однозначно идентифицировать отсутствие нажатия на кнопку. Иначе без резистора на входе может появляться неоднозначный логический уровень, особенно при нестабильном источнике питания или длинных кабелях, соединяющих кнопку с контроллером. При возникновении таких негативных факторов, на входе вообще может возникать пульсирующее напряжение.

Но зачем же использовать лишние внешние резисторы, если можно использовать предусмотренные внутренние. Производители современных контроллеров предусматривают необходимость таких подтягивающих резисторов и внедряют их прямо в кристалл. Активировать их можно программым путем. В микроконтроллерах STM, например, доступны для активации два резистора по 10 кОм: подтягивающий на ноль питания и подтягивающий на плюс питания. А разработчики Arduino решили, что пользователям хватит и одного, подтягивающего к плюсу резистора (20 ... 50 кОм у всех контроллеров по разному). При таком выборе из одного резистора нам доступна только обратная логика дискретного входа для кнопки (если нажали на кнопку то получаем логический ноль).



Привожу пример моей стабильно работающей программы, которая подсчитывает количество нажатий на кнопку и передает значение этого количества в монитор порта. Программа добавляет единицу к счетчику нажатий при отрицательном перепаде логического уровня на дискретном входе. В программе так же приведён пример подключения внутреннего подтягивающего резистора для входа.


const int button = 5;     // вывод контроллера для кнопки
int count = 0;         // переменная для подсчета нажатий на кнопку
int button_old = 1;    // предидущее значение входа для отлавливания момента нажатия
void setup() {
  //инициализация связи с монитором порта
  Serial.begin(9600);
  //конфигурация входа контроллера и подключение внутреннего подтягивающего резистора
  pinMode(button, INPUT_PULLUP);
}
void loop() {
  if ((digitalRead(button)==LOW)&&(button_old==1))
  { 
    count = count + 1;
    Serial.println(count);
  }
  button_old = digitalRead(button); 
  
  delay(10);
}


При нажимании на кнопку в монитор порта добавляется новая строчка с увеличенной цифрой.

Связка кнопки с контроллером Arduino UNO при такой реализации показала завидную стабильность и безотказность. Как я ни пробовал сбить контроллер с толку, нажимая то слишком коротко, то слишком долго, дребезга так и не добился. И был просто удивлен точностью отработки. Не было ни разу так, чтобы при нажатии единица не добавилась или добавилось несколько единиц. И учитывая то, что передо мной совсем недавно возникали задачи сделать ручные счётчики для спортивных подсчетов (количество угловых, фолов... на минифутбольном матче), а я посоветовал заказчику купить механические счётчики, не доверяя стабильности отработки кнопок, сейчас я уже больше доверял бы электронным кнопкам с Arduino.

Похожие статьи

Контроль исполнения программы Arduino

Контроль исполнения программы Arduino

Данная статья посвящена описанию структур, используемых для управления циклом выполнения программы (логика управления). Управление логикой Arduino такое же как у языка C. И мы остановимся на процедурах, характерных только среде Arduino.

Arduino - что это такое? Популярно для начинающих

Arduino - что это такое? Популярно для начинающих

Arduino это недорогая, доступная в смысле покупки электронная плата с микроконтроллером и выводами входов-выходов. Arduino выпускаются в различных версиях, но поддерживают один и тот же, простой язык программирования. Огромный успех Ардуино, с уважением к другим микроконтроллерам, связан с тем, что аппаратное и программное обеспечение были опубликованы в открытом бесплатном для общего пользования виде: вы можете читать, изучать и даже расширять его возможности как в плане программного обеспечения, так и с точки зрения аппаратных средств. Вся информация об Ардуино доступна под лицензией "Creative Commons Attribution-ShareAlike 3.0 License".

Arduino основы программирования

Arduino основы программирования

Здесь мы научимся писать элементарную программу способную сделать что-либо интересное для новичка. Здесь вы узнаете, как написать простейший скетч для Arduino используя стандартый IDE. Мы пока пропустим использование входов-выходов, но обратим внимание на связь через USB. Синтаксис языка Arduino точно повторяет язык C, поэтому на нем мы останавливаться не будем. Мы сконцентрируемся на конкретных аспектах Arduino языка, в котором вы можете использовать все принципы, которые присущи языку C: переменные, операторы, состояния, типы, константы и т.д.

Теги: Подключение кнопки к Arduino