Працюємо з 09:00 до 19:00 без вихідних.
Самовивіз - Київ біля ТЦ Квадрат бул.Перова

Изначально собирался написать статью о фильтрации дребезга кнопки, подключенной к контроллеру 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.

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Разветвитель на 5 коннекторов JST SM

Разветвитель на 5 коннекторов JST SM

Разветвитель для коннекторов JST SMМожно подключать 5 коннекторов..

44.10грн.

Компаратор сдвоенный LM393DR

Компаратор сдвоенный LM393DR

LM393DR в корпусе SOP-8 для поверхностного монтажа.Эти микросхемы разработчики всевозможных датчиков..

2.67грн.

ATtiny85 mini

ATtiny85 mini

Миниатюрная плата контроллера на основе микроконтроллера ATtiny85 Напряжение сигналов 5В 4..

51.15грн.

WiFi контроллер WeMos D1

WiFi контроллер WeMos D1

Плата контроллера на основе ESP8266 ESP-12E, имитирующая Arduino UNO, но уступающая ему по..

176.60грн.

Модуль твердотельного реле 4-канальный

Модуль твердотельного реле 4-канальный

Модуль предназначен для коммутации нагрузок с переменным напряжением питания 75 ... 264 ВМаксимальны..

190.02грн.