Включение светодиода кнопкой Ардуино можно осуществить различными способами — можно управлять светодиодом одной или двумя кнопками, а можно плавно менять яркость светодиода.
Рассмотрев представленные скетчи, вы сможете использовать в своих проектах тактовые кнопки для управления Ардуино.
Включение и выключение светодиода кнопкой Ардуино производится с помощью подключения одной тактовой кнопки к цифровому пину без подтягивающего резистора. Дело в том, что платы Arduino имеют встроенные резисторы, которыми можно управлять. Для этого следует использовать в pinMode() параметр INPUT_PULLUP, которая сконфигурирует пин на вход с подтягивающим резистором.
Обратите внимание, что при использовании INPUT_PULLUP происходит подтяжка цифрового входа к 5 вольтам, поэтому значение входящего сигнала будет инвертирован.
То есть, при отпущенной кнопке, которая подключена к заземлению — GND, на цифровом входе будет высокий сигнал. При нажатии на кнопку — на входе, который сконфигурирован с помощью INPUT_PULLUP, будет низкий сигнал.
Для переключения светодиода кнопкой Ардуино соберите схему: один контакт кнопки на пин 2, второй на GND. Светодиод подключите на пин 10 и GND (не забудьте про резистор к светодиоду 220 Ом).
Обратите внимание, что тактовая кнопка на макетной плате подключена к микроконтроллеру без подтягивающего резистора.
Пин 2 подключен к 5V через встроенный резистор, поэтому при отпущенной кнопке на входе пине 2 будет высокий уровень сигнала, а при нажатии кнопки будет низкий уровень..
Скетч. Управление светодиодом Ардуино через кнопку
boolean buttonWasUp = true; boolean ledEnabled = false; void setup() { pinMode(10, OUTPUT); // определяем пин 10 как выход pinMode(2, INPUT_PULLUP); // определяем пин 2 как вход и подтягиваем его } void loop() { // узнаем, отпущена ли кнопка сейчас boolean buttonIsUp = digitalRead(2); // если кнопка была отпущена и не отпущена сейчас if (buttonWasUp && !buttonIsUp) { // исключаем дребезг контактов тактовой кнопки delay(10); // и считываем сигнал с кнопки снова buttonIsUp = digitalRead(2); // если кнопка нажата, то переворачиваем сигнал светодиода if (!buttonIsUp) { ledEnabled = !ledEnabled; digitalWrite(10, ledEnabled); } } // запоминаем состояние кнопки для новой итерации buttonWasUp = buttonIsUp; }
Пояснения к коду:
boolean
— это глобальная переменная Ардуино, которая может принимать всего два значения – true (истина) и false (ложь);- задержка
delay(10);
в программе позволяет избежать «дребезг контактов» кнопки и исключить ложное срабатывание.
Скетч. Управление двумя кнопками одним светодиодом
(кнопки на пин 2 и пин 4, светодиод пин 10)
boolean button1WasUp = true; boolean button2WasUp = true; void setup() { pinMode(10, OUTPUT); digitalWrite(10, LOW); pinMode(2, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); } void loop() { // узнаем, отпущены ли две кнопки сейчас boolean button1IsUp = digitalRead(2); boolean button2IsUp = digitalRead(4); // если кнопка 1 была отпущена и не отпущена if (button1WasUp && !button1IsUp) { delay(10); // повторно считываем сигнал с кнопки 1 button1IsUp = digitalRead(2); if (!button1IsUp) { digitalWrite(10, LOW); } } // если кнопка 2 была отпущена и не отпущена if (button2WasUp && !button2IsUp) { delay(10); // повторно считываем сигнал с кнопки 2 button2IsUp = digitalRead(4); if (!button2IsUp) { digitalWrite(10, HIGH); } } // запоминаем состояние двух кнопок ардуино button1WasUp = button1IsUp; button2WasUp = button2IsUp; }
Пояснения к коду:
- данный пример программы позволяет включать светодиод нажатием одной кнопки и выключать светодиод нажатием второй кнопки;
- Задержка Ардуино
delay(10);
позволяет избежать «дребезг контактов» кнопки и исключить возможность ложного срабатывания.