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

Рисунок 1. Кнопка
Существуют 2 основные схемы подключения кнопки:
PULL UP - когда вывод, с которого считывается информация о состоянии кнопки, соединен через резистор с высоким уровнем сигнала +5V;
PULL DOWN - вывод, с которого считывается информация о состоянии кнопки, соединен через резистор с низким уровнем сигнала 0V(GND).

Рисунок 2. Две основные схемы подключения кнопки
Обратите внимание! Внутри кнопки пины попарно соединены между собой как показано на следующих рисунках.
PULL UP: в отпущенном состоянии с кнопки будет считано HIGH, а в нажатом LOW.
PULL UP, когда кнопка НЕ нажата - на пин поступит высокий уровень сигнала HIGH (+5 Вольт). Когда кнопка нажата - на пин поступит низкий уровень сигнала LOW(GND).

Рисунок 3. Схема PULL UP
PULL DOWN: в отпущенном состоянии с кнопки будет считано LOW, а в нажатом HIGH.
PULL DOWN, когда кнопка НЕ нажата - на пин поступит низкий уровень сигнала LOW (GND). Когда кнопка нажата - на пин поступит высокий уровень сигнала HIGH (+5 Вольт).

Рисунок 4. Схема PULL DOWN
Вывод кнопки, который расположен напротив пина, с которого считывается ее состояние соединяется к питанию или земле обязательно через резистор. Номинал резистора 1 кОм. Резистор помогает избежать помех и считывания неверного состояния кнопки.
Светофор с ручным управлением
###сборка схемы Соберем светофор с ручным управлением. В нем светодиоды будут включаться с помощью кнопок. На каждый сигнал светофора своя кнопка. Кнопки подключаем по схеме PULL DOWN.

Рисунок 5. Схема светофора с ручным управлением
Программа для управления светофором
Запрограммируем ручной светофор. Объявим светодиоды и кнопки. В процедуре void setup() настроим пины для светодиодов и кнопок:
- кнопки - вход (INPUT), считываем их состояние;
- светодиоды - выход (OUTPUT) задаем их состояние.
В процедуре void loop() будет 4 возможных варианта действий:
- ЕСЛИ нажата кнопка, отвечающая за включение красного светодиода - то он включится;
- ЕСЛИ нажата кнопка, отвечающая за включение желтого светодиода - то он включится;
- ЕСЛИ нажата кнопка, отвечающая за включение зеленого светодиода - то он включится;
- ИНАЧЕ - все три светодиода будут выключены.
//создаем переменные для светодиодов
int ledRed = 5;
int ledYellow = 6;
int ledGreen = 7;
//создаем переменные для кнопок
#define buttonRed 2
#define buttonYellow 3
#define buttonGreen 4
void setup(){
//настраиваем пины, к которым подключены светодиоды, как выходы
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
//настраиваем пины, к которым подключены кнопки, как входы
pinMode(buttonRed, INPUT);
pinMode(buttonYellow, INPUT);
pinMode(buttonGreen, INPUT);
}
void loop(){
//если нажата кнопка, отвечающая за включение красного светодиода то красный светодиод включается
if(digitalRead(buttonRed)==HIGH){
digitalWrite(ledRed, HIGH);
}
//если нажата кнопка, отвечающая за включение желтого светодиода, то желтый светодиод включается
else if(digitalRead(buttonYellow)==HIGH){
digitalWrite(ledYellow, HIGH);
}
//если нажата кнопка, отвечающая за включение зеленого светодиода, то зеленый светодиод включается
else if(digitalRead(buttonGreen)==HIGH){
digitalWrite(ledGreen, HIGH);
}
//иначе все три светодиода выключены
else{
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
}
}
Задания
Соберите схему из Arduino, синего светодиода, подключенного к пину 11 с резистором номиналом 390 Ом, и кнопки с резистором, номиналом 10 кОм, подключенной к пину 3. Запрограммируйте Arduino чтобы светодиод циклически включался на 0.3 секунды, и выключался на 0.3 секунды при нажатой кнопке, и никогда не включался при отпущенной.
Соберите схему из Arduino, красного и синего светодиодов, подключенных к пинам 8 и 9 с резисторами номиналом 390 Ом, и кнопки с резистором, номиналом 10 кОм, подключенной к пину 4. Запрограммируйте Arduino чтобы светодиоды поочередно включались и выключались на 0.5 секунды в противофазе - если включен первый то выключен второй и наоборот. Светодиоды должны поочередно включатся после короткого однократного нажатия кнопки, и перестать включаться после следующего короткого однократного нажатия кнопки.