Віримо в перемогу ЗСУ!
Працюємо з 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Микро концевой выключатель KW-1

Микро концевой выключатель KW-1

Микро переключатель с максимальным током коммутации 2 А. Такие ставят в компьютерные мышки в качеств..

6.89грн.

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

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

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

186.70грн.

Торцевой подшипник под вращающуюся ось 8 мм

Торцевой подшипник под вращающуюся ось 8 мм

Такие подшипники предназначены для крепления оси червячной передачи на любой из трёх осей перемещени..

72.12грн.

Припой с канифолью 0,5мм 30г

Припой с канифолью 0,5мм 30г

Нить припоя для тонкой пайки мелких радиодеталей, содержащая флюсСвинца 40 %Олова 60 %Флюса 1,2 %Нап..

203.06грн.

Двигатель 12В с редуктором 150RPM

Двигатель 12В с редуктором 150RPM

Коллекторный двигатель постоянного тока с сильным редуктором для использования в различной робототех..

552.16грн.