ЗАДАЧИ УРОКА

  • Разобрать схему подключения кнопки к Ардуино для организации управления событиями.
  • Рассмотреть программную реализацию счетчика событий на примере подсчета нажатий кнопки.
  • Изучить конструкцию if … else для программной реализации алгоритмической конструкции «ветвление».

ТЕОРИЯ

В этом уроке мы будем рассматривать схему кнопки, которая наиболее часто встречается в наборах Ардуино.

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

ИТАК … если кнопка не нажата, то между собой соединены контакты 1-3 и 2-4. Если же кнопку нажать, то все 4 вывода соединяются между собой. Для того, что бы кнопка стала управляющим элементом схемы, нам надо сделать так, чтобы при нажатии на pin Ардуино поступал HIGH сигнал, а в стальное время на данном pin был сигнал LOW. Давайте для начала организуем постоянный сигнал LOW. Это совсем не сложно, учитывая, что выводы 1-3 и 2-4 постоянно замкнуты ))))

Если честно, то для реализации подключения к GND резистор в цепи подключения нам не нужен. НО!!!! Без него пропадет смысл следующего шага, точнее следующий шаг станет ОПАСНЫМ ))))) При нажатии кнопки мы получаем коммутацию 2 и 3 вывода. Так как к выводу 1 подключен резистор, то, по принципу «электрический ток протекает по пути НАИМЕНЬШЕГО сопротивления, мы получим активную цепь через контакты 2 и 3, что приведет к появлению на pin4 сигнала HIGH. А вот если резистор совсем убрать, то мы получим короткое замыкание. В лучшем случае у вас просто выключится вся схема ))))

ПЕРЕЧЕНЬ КОМПОНЕНТОВ

  • ARDUINO UNO R3 (оригинальная плата)
  • LCD дисплей 16х2 с модулем I2C
  • Монтажная плата
  • Светодиод
  • Кнопка
  • Резистор 1 кОм
  • Соединительные провода

МАКЕТ СХЕМЫ

Практическая реализация макета

ЭТАП 1.  СУММИРУЕМ НАЖАТИЯ.

При решении этой задачи мы столкнемся с реализацией очень популярного приема — «счетчик события». В простейшем случае это выглядит так…

Перед выполнением основного блока программы мы устанавливаем значение переменной k=0. В основном блоке значение k увеличивается на 1, после чего выполняется задержка выполнения на 1000 мсек, т.е. 1 сек. И k снова увеличивается на 1.

В языке программирования для Ардуино конструкция k=k+1 реализуется ф форме k++.

ЭТАП 2.  СУММИРУЕМ И ВЫЧИТАЕМ )))

Думаю, вы уже привыкли, что я сам постоянно критикую свои программы и пытаюсь их улучшить. Этот урок не исключение. Но оптимизировать программный код мы будем дополнив программу новой функцией. Давайте подключим еще одну кнопку и заставим ее уменьшать количество нажатий первой кнопки. Если команда k++ увеличивала значение переменной на 1, то k— уменьшает эту переменную на 1. Думаю, что остальные команды скетча вам будут понятны и без описания, т.к. все они были рассмотрены на Уроках 1-3. ХОТЯ!!! Не удержался и несколько комментариев вставил!

Внимательный читатель мог задаться логичным вопросом. Почему в программе по включению диода не пресутсвует, а в программе по подсчету нажатий пресутсвует некая задержка delay(200)? Этот вопрос касается многих аспектов электротехники, которые касаются изменения характеристик кнопки в ОЧЕНЬ короткий промежуток времени между нажатием и отпусканием. Но ,вкратце, за этот промежуток времени происходит так называемый дребезг кнопки, из-за которого фактически через кнопку в момент отжатия не просто пошел сигнал, а происходит многократная смена логического нуля и единицы, которые может принят, как пример, наш микроконтроллер. Наши глаза не могут уследить за такой быстрой сменой состояний светодиода, поэтому такое явление не вредит работе системы и задержка не требуется. НО микроконтроллер — высокочувствительная система, которая улавливает эти изменения и вместо одного                  » нажатие — отжатие » зафиксирует лишнее явление. Чтобы избежать этого, самым простым способом является переждать дребезг. Поэтому стоит кратковременная задержка, которая не обяательно должна быть такой. Поэтому вы сами можете изучить качество вашей кнопки и подобрать минимально возможное значение задержки, при которой ошибки в работе не наблюдается.))))

Итоговый вариант без комментариев ))))