Працюємо з 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Модуль 4-х MOSFET транзисторов 20А

Модуль 4-х MOSFET транзисторов 20А

Модуль для коммутации 4-х мощных нагрузок постоянного тока при помощи управляющих сигналов от контро..

152.04грн.

Модуль Ethernet ENC28J60 с питанием 3,3 В

Модуль Ethernet ENC28J60 с питанием 3,3 В

Ethernet модуль с коммуникацией SPI с питанием 3,3 В на основе микросхемы ENC28J60Применяется д..

105.37грн.

Цифровой датчик температуры DS18B20

Цифровой датчик температуры DS18B20

Напряжение питания 3 ... 5,5 ВРабочая температура -55 ... +125 °CТочность ±0,5 °C обе..

26.92грн.

Стойка латунная М3 высотой 15мм шестигранник мама-мама

Стойка латунная М3 высотой 15мм шестигранник мама-мама

Латунная стойка мама-мама с резьбой М3 и шестигранным внешним сечениемПрименяется при конструировани..

7.34грн.

Шарниры под вращающуюся ось 8, 10мм 2шт.

Шарниры под вращающуюся ось 8, 10мм 2шт.

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

109.13грн.