Сегодня мы продолжаем работать со схемой, которую мы собрали в прошлый раз, и напишем скетч для выключателя, светодиода и кнопки в Arduino UNO.
Мы сделали на монтажной плате схему из резистора, светодиода, кнопки и набора проводников.
У нас подается 5 вольт на кнопку, и если через кнопку приходит 5 Вольт на 12 пин на плате Arduino, то загорается светодиод, соответственно если нет, то светодиод не горит.
Давайте модифицируем предыдущий скетч таким образом, чтобы наша схема работала как выключатель, светодиод должен гореть при нажатии, при повторном нажатии светодиод погаснет.
Давайте введём несколько дополнительных переменных типа int в наш предыдущий код, объявим переменную tekButton
- текущая кнопка, присвоим ей значение LOW
, это у нас будет 0 или отсутствие напряжения, еще одна int
переменная prevButton
это у нас будет обозначать прошлое состояние нажатия на кнопку.
Присвоим этой переменной значение LOW
и объявим логическую булевую переменную ledOn
, которая будет иметь значение False
, означающее ложь или 0.
Подпрограмму setup поставим без изменения, а в цикле loop мы напишем следующий код.
Запишем нашу переменную tekButton
равно, через DigitalRead
мы присвоим ей значения переменной keyPin
.
Как вы помните это у нас 12 разъем, и переменная tekButton
будет учитывать состояние 12 разъёма и изменим теперь условия if, если tekButton принимает значения HIGH
, если подаётся напряжение на 12 разъем и предыдущее значение переменной prevButton
будет равно LOW
, то есть, предыдущий раз не было напряжения, то ledOn
, наша булевая переменная, будет инвертироваться, принимать противоположное значение.
Если изначально она равно False(ложь), то станет равна True, и соответственно в функцию digitalWrite( ledPin)
мы передаем инвертированная значение ledOn
.
В принципе конструкция else нам уже не нужна. Давайте присвоим prevButton значение tekButton
.
Сохраним наш скетч, проверим и загрузим его на Arduino.
Смотрите так же видео Скетч - выключатель, светодиод и кнопка в Arduino UNO - (видео), ссылка откроется в новой вкладке.
Промигали индикаторы, прошла загрузка, при нажатии на кнопку индикатор горит, при повторном нажатии индикатор гаснет.
Но если вы заметили, не каждое нажатие на кнопку отрабатывается правильно, иногда светодиод горит, иногда не гаснет, а должен, такое происходит из дребезга контактов, которые почти всегда не точно коммутируют нашу электрическую цепь.
Давайте ещё немного модифицируем наш код, перезапустив его, может быть что-то, где-то не прошло, опять нажали, где-то удерживает, где-то не срабатывает.
Давайте изменим скетч таким образом, чтобы у нас срабатывало всё чётко, надо избавиться от этого дребезга контактов.
Напишем небольшую функцию, которая будет всем этим делом управлять, функция у нас будет логическая, Boolean, она будет возвращать либо True либо False, назовем ее testLed
.
У нас будет тест светодиода. Внутренняя переменная last
будет принимать значение true/false.
Объявим еще одну логическую переменную - current
текущее значение будет равно digitalRead
и принимать значение она будет из переменной keyPin
, с нашего 12 разъёма.
Будет определяться, подавалось ли напряжение или нет, если предыдущее значению last
не равно текущему current
, то мы выполним следующие действия: сделаем небольшую задержку в 5 миллисекунд с помощью delay
, этого будет достаточно чтобы процессор обработал данные и присвоим переменной current
значение DigitalWrite
с нашего 12 разъёма через переменную keyPin
.
Ну и соответственно наша функция testLed
должна что-то вернуть, для этого допишем return
и возвращать она будет current
– текущее нажатие, с небольшой задержкой в 5 миллисекунд.
Так давайте теперь в нашем коде изменим tekButton
у нас будет принимать значение из функции testLed
, здесь мы будем передавать переменную prevButton
, которая в самом начале у нас имеет значение LOW
.
И теперь мы перенесём из скобок функцию digitalWrite
. Ну и в принципе на этом модификация кода у нас завершена. Визуально проверим, нет ли ошибок, можно проверять, так проверка прошла и скетч загрузится в Arduino.
Вернемся к нашей монтажной схеме, загрузка прошла, как видите, горит светодиод, нажимаем на кнопку и с каждым нажатием у нас происходит точное срабатывание, загорается светодиод и гаснет при повторном нажатии.
Как видите всё очень просто! В следующих статьях, мы вернемся к коду с кнопкой, поскольку на этой конструкции будут базироваться остальные разработки.
Видео: Скетч - выключатель, светодиод и кнопка в Arduino UNO
Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!
Новые статьи
- Управление погружным насосом на Arduino - 18/06/2019 17:07
- Arduino и датчик ультразвука. Определение расстояния до объекта. - 12/04/2019 14:52
- Arduino в роли вольтметра. Вывод напряжения на LCD дисплей - 10/04/2019 15:32
- Подключаем терморезистор к arduino, получим температуру в градусах по Цельсию и по Фаренгейту - 23/02/2019 20:51
- Как подключить дисплей LCD1602 к Arduino - 23/02/2019 19:35
- Как подключить сервомотор к Arduino - 23/02/2019 19:12
- Подключение RGB светодиода к Arduino - 12/01/2019 15:25
- Фоторезистор и светодиоды на Arduino - 12/01/2019 11:38
- Играем ноты на пищалке с Arduino - 12/01/2019 10:34
- Вынос мозга!!! АЦКИЙ BUZZER - омерзительная пищалка на Arduino Uno - 12/01/2019 09:55
- Новогодняя мини гирлянда в Arduino UNO. Как сделать мини гирлянду в Arduino UNO на светодиодах. - 12/01/2019 08:40