Включение светодиода кнопкой Ардуино можно осуществить различными способами — можно управлять светодиодом одной или двумя кнопками, а можно плавно менять яркость светодиода.
Рассмотрев представленные скетчи, вы сможете использовать в своих проектах тактовые кнопки для управления Ардуино.
Включение и выключение светодиода кнопкой Ардуино производится с помощью подключения одной тактовой кнопки к цифровому пину без подтягивающего резистора. Дело в том, что платы 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);позволяет избежать «дребезг контактов» кнопки и исключить возможность ложного срабатывания.