Найти тему
ТехноБобёр

Работа с тактовой кнопкой, включение и выключение светодиода.

Все рассмотренные выше элементы управлялись исключительно по заранее заданной программе и повлиять на этот процесс не было никакой возможности. Однако, если есть необходимость управления каким-либо процессом в реальном времени, то требуется добавление взаимодействия человека или окружающей среды с контроллером. Это достигается при помощи различных датчиков, т.е. устройств, считывающих различную информацию. Простейшим датчиком является кнопка. Как выглядит тактовая кнопка и как она обозначается на схеме, можно увидеть на рисунке. У кнопки 4 ножки. Каждая пара ножек соединена между собой. При нажатии на кнопку все 4 ножки соединяются. Какие ножки изначально соединены, можно выяснить экспериментально или с помощью мультиметра. Хотя, если перевернуть тактовую кнопку, то с обратной стороны корпуса можно увидеть, что пара соединенных ножек будет отделена от второй пары небольшим углублением в корпусе.

Картинка с обозначением тактовой кнопки на схеме и ее внешний вид.
Картинка с обозначением тактовой кнопки на схеме и ее внешний вид.

Соберём схему, в которой светодиод будет загораться при нажатии на кнопку.

Для схемы потребуется:

1. Контроллер

2. Макетная плата

3. Светодиод

4. Тактовая кнопка

5. Резистор 240 Ом - 1 шт.

6. Резистор 10 к0м -1 шт. (для кнопки)

Схема сборки. Для проверки работы тактовой кнопки.
Схема сборки. Для проверки работы тактовой кнопки.

Подключим катод (короткую ножку) светодиода к выводу GND (черный провод на рисунке), а анод - через резистор к вводу 3 (рыжий провод на рисунке), Одну пару ножек кнопки подключим и питанию на плате 5B (белый провод на рисунке), вторую пару - через резистор к выводу GND (черный провод на рисунке) и параллельно эту же пару ножек подключим напрямую к выводу 2 (розовый провод на рисунке).

При нажатии на кнопку у нас напряжение в 5 В будет передаваться напрямую на вывод 2. Чтобы не испортить плату большими томами, мы параллельно через резистор подключились к выводу GND то есть отвели часть токов в сторону. Вполне возможно сделать подключение к выводу 2 не напрямую от кнопки, а через резистор, аналогично с тем, как подключен светодиод. Но в качестве примера рассмотрим именно такой способ.

ВНИМАНИЕ: В разных уроках мы подключаем элементы то и одному выводу GND, то другому. Питание подаем либо напрямую и элементам, либо через шины (плюс и минус) на макетной плате. Это все сделано, чтобы показать различные возможные способы подключения. А вы можете делать подключения, как вам наиболее удобно.

Наша программа будет построена по такому принципу: при нажатии на кнопку на вывод 2 подается сигнал. Плата «почувствует» сигнал на выводе 2, она должна подать напряжение на светодиод (вывод 3). int LED = 3; Напишем скетч (программу):

Программа для включения светодиода при нажатии на тактовую кнопку.
Программа для включения светодиода при нажатии на тактовую кнопку.

pinMode (BUTTON, INPUT); - эта команда настраивает цифрой вывод BUTTON (в нашем случае вывод номер 2) как ВХОД. То есть с вывода 2 плата будет считывать информацию.

val = digitalRead (BUTTON); - присваиваем переменной val значение от выполнения команды - digitalRead (BUTTON).

digitalRead (BUTTON); - команда, которая проверяет цифровой вывод BUTTON (в нашем случае вывод 2) и, если на вывод подано напряжение (в нашем случае нажата кнопка), то возвращает значение «HIGH», если нет напряжения (в нашем случае кнопка не нажата), то значение «LOW».Tо есть переменной val будет присвоено либо значение «HIGH», либо «LOW».

if (val == HIGH) {} else{} - это выражение называется «условный оператор». Возможно, оно является одним из самых важных в программировании. Условный оператор позволяет делать выбор при выполнении некоторых условий. После ключевого слова if вы должны написать "условие в круглых скобках, и, если " условие " или результат верен, будет выполнен блок программы, заключенный в фигурные скобки. Если ответ неверен, будет выполнен блок программы в фигурных скобках после ключевого слова "else".

ВНИМАНИЕ: В условном операторе if использовался символ == - двойное равенство, вместо =. Символ == используется при сравнении двух значений, а = присватает значение переменной. Удостоверьтесь, что вы пользуетесь ими правильно, так как очень легко совершить подобную ошибку и использовать одинарное равно.

Итак, в круглых скобках написано выражение val == HIGH. Tо есть, если у переменной val значение HIGH, то выполнится команда в фигурных скобках после if, а если у нее другое значение, то выполнится команда в фигурных скобках после слова else.

В нашем случае, если кнопка нажата, то у val значение HIGH, и выполняется команда diritalWrite(LED, HIGH), которая подает напряжение на вывод LED и зажигает светодиод. Если значение LOW (кнопка не нажата), то выполняется команда dieitalWrite(LEO, LOW), отключающая напряжение на выводе LED (отключает светодиод).

Допускается не писать слово "else", тогда программа при невыполнении условия просто продолжится дальше.

Изменим скетч и сделаем так, чтобы светодиод не гас после отпускания кнопки, а гас только после повторного нажатия.

Усовершенствованная программа.
Усовершенствованная программа.

В данном скетче введена переменная state. Это переменная, которая хранит значение 0 или 1 для запоминания включён светодиод или нет. Программа считывает текущее состояние кнопки, и, если она нажата, значение state меняется с 0 на 1 или с 1 на 0. Так как state может быть равна только 1 или 0, используется небольшой трюк. Он заключается в математическом выражении:

Дословно программа действует так: если кнопка нажата (val == HIGH), то состояние state меняется либо с 0 на 1, либо с 1 на 0 и далее еще одно условие: если state = 1, то зажигаем светодиод, в противном случае (если state = 0) гасим светодиод.

Загружаем скетч на плату и проверяем его работу. При нажатии на кнопку диод должен загореться и не гаснуть. При повторном нажатии он должен погаснуть. Само собой,вместо светодиода можно использовать любое устройство.

ВНИМАНИЕ: После команды digitalRead(BUTTON) стонт задержка программы на 200 миллисекунд. Это необходимо для того, чтобы вы успели отпустить кнопку. Если вы продержите кнопку более 200 миллисекунд, то программа снова вернется к этой команде и зафиксирует данную ситуацию, как повторное нажатие кнопки.