4.01.2. Лабораторная работа №4.1.2.md
Подключение кнопки
Тема работы
В прошлой работе мы научились «говорить» — отправлять сигналы на светодиод. Теперь пора научиться «слышать» — получать сигналы от пользователя. В этой лабораторной работе мы изучим четыре основных способа подключения кнопок к плате Рудирон
и напишем программу, которая будет считывать их нажатия и управлять светодиодами.
Цель
- Научиться подключать кнопки к
GPIO
пинам, используя внешние и внутренние подтягивающие и стягивающие резисторы. - На практике увидеть, как способ подключения влияет на логику программы.
- Освоить команду
digitalRead()
для считывания цифровых сигналов. - Создать интерактивную схему, где состояние светодиодов зависит от нажатия кнопок.
Оборудование и материалы
- Отладочная плата
Рудирон
. - Макетная плата.
- 4 тактовые кнопки.
- 4 светодиода (любого цвета).
- 4 резистора номиналом 220 Ом (для светодиодов).
- 2 резистора номиналом 10 кОм (для кнопок).
- Соединительные провода.
- USB-кабель для подключения
Рудирона
к компьютеру. - Компьютер с настроенной средой
Arduino IDE
.
Ход работы
Мы соберём одну большую схему, в которой будут реализованы четыре разных способа подключения кнопок. Каждая кнопка будет управлять своим светодиодом.
1. Подключение светодиодов
Сначала подготовим индикацию. Это поможет нам визуально отслеживать нажатие каждой кнопки.
- Вставьте четыре светодиода в макетную плату.
- К коротким ножкам (катодам) каждого светодиода подключите по одному резистору на 220 Ом.
- Вторые выводы резисторов соедините с
GND
на платеРудирон
. - Длинные ножки (аноды) светодиодов подключите к пинам
Рудирона
:- Первый светодиод — к пину 12.
- Второй светодиод — к пину 13.
- Третий светодиод — к пину 14.
- Четвертый светодиод — к пину 15.
2. Подключение кнопок четырьмя способами
Теперь самое интересное — подключаем кнопки.
Способ №1. Внешний стягивающий резистор (Pull-down
) В этой схеме, когда кнопка не нажата, пин через резистор «стянут» к земле (LOW
). При нажатии на пин подаётся напряжение (HIGH
).
- Подключите первую кнопку к пину 0.
- Один контакт кнопки соедините с пином 5V.
- Другой контакт кнопки соедините с пином 0 и с одним из выводов резистора на 10 кОм.
- Второй вывод резистора подключите к
GND
.
Способ №2. Внешний подтягивающий резистор (Pull-up
) Здесь всё наоборот. Когда кнопка не нажата, пин «подтянут» к питанию (HIGH
). При нажатии пин соединяется с землёй (LOW
).
- Подключите вторую кнопку к пину 1.
- Один контакт кнопки соедините с
GND
. - Другой контакт кнопки соедините с пином 1 и с одним из выводов резистора на 10 кОм.
- Второй вывод резистора подключите к
5V
.
Способ №3. Внутренний подтягивающий резистор (INPUT_PULLUP
) Это самый простой способ, так как не требует внешнего резистора. Мы активируем внутренний резистор Рудирона
, который подтянет пин к 3.3В. Логика работы такая же, как в Способе №2.
- Подключите третью кнопку к пину 2.
- Один контакт кнопки соедините с
GND
. - Другой контакт кнопки соедините с пином 2.
Способ №4: Внутренний стягивающий резистор (INPUT_PULLDOWN
) Рудирон
поддерживает и этот удобный режим. Внутренний резистор «стягивает» пин к земле (LOW
). При нажатии на пин нужно подать напряжение, и мы прочитаем HIGH
.
- Подключите четвертую кнопку к пину 3.
- Один контакт кнопки соедините с пином 3.3V на
Рудироне
. - Другой контакт кнопки соедините с пином 3.
Общая схема сборки Вот как все эти подключения будут выглядеть вместе на макетной плате:
3. Написание и загрузка кода
Напишем единую программу, которая будет опрашивать все четыре кнопки и напрямую передавать их состояние на светодиоды.
- Убедитесь, что перемычка
PRG | RUN
стоит в положенииPRG
. -
Откройте
Arduino IDE
и введите следующий код:// Пины для светодиодов const int led1Pin = 12; const int led2Pin = 13; const int led3Pin = 14; const int led4Pin = 15; // Пины для кнопок const int button1Pin = 0; // Внешний pull-down const int button2Pin = 1; // Внешний pull-up const int button3Pin = 2; // Внутренний pull-up const int button4Pin = 3; // Внутренний pull-down void setup() { // Настраиваем пины светодиодов на выход pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); // Настраиваем пины кнопок на вход pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT_PULLUP); pinMode(button4Pin, INPUT_PULLDOWN); } void loop() { // Считываем состояние каждой кнопки bool button1State = digitalRead(button1Pin); // При нажатии будет HIGH bool button2State = digitalRead(button2Pin); // При нажатии будет LOW bool button3State = digitalRead(button3Pin); // При нажатии будет LOW bool button4State = digitalRead(button4Pin); // При нажатии будет HIGH // Напрямую управляем светодиодами на основе состояния кнопок digitalWrite(led1Pin, button1State); digitalWrite(led2Pin, button2State); digitalWrite(led3Pin, button3State); digitalWrite(led4Pin, button4State); }
- Нажмите кнопку «Upload», чтобы загрузить код на плату.
4. Проверка работы
После загрузки программы внимательно проверьте работу каждой кнопки:
- Нажмите кнопку 1 (pull-down) - светодиод 1 загорится.
- Нажмите кнопку 2 (pull-up) - светодиод 2 погаснет (потому что при нажатии на пин приходит
LOW
). - Нажмите кнопку 3 (внутренний pull-up) - светодиод 3 тоже погаснет.
- Нажмите кнопку 4 (внутренний pull-down) - светодиод 4 загорится.
Результаты
Вы собрали схему с четырьмя разными способами подключения кнопок и наглядно увидели, как способ подключения влияет на результат. Вы поняли, почему в одних случаях нажатие кнопки даёт сигнал HIGH
, а в других — LOW
.
Анализ результатов
- Схемы
pull-down
(кнопки 1 и 4). Резистор (внешний или внутренний) «стягивает» пин к земле. По умолчанию на пинеLOW
. При нажатии кнопки на пин подаётся напряжение, иdigitalRead()
возвращаетHIGH
. - Схемы
pull-up
(кнопки 2 и 3). Резистор «подтягивает» пин к питанию. По умолчанию на пинеHIGH
(поэтому светодиоды 2 и 3 горят). При нажатии кнопки пин замыкается на землю, иdigitalRead()
возвращаетLOW
(светодиоды гаснут).
Выводы
В этой лабораторной работе вы научились самому главному — получать сигналы от пользователя. Вы изучили четыре способа подключения кнопок, поняли важность подтягивающих и стягивающих резисторов и освоили команду digitalRead()
. Теперь вы можете создавать устройства, которые не просто выполняют программу, а реагируют на внешние команды.
Вопросы для самопроверки
- Что такое «плавающее» состояние пина и почему его нужно избегать?
- В чём разница между
pull-up
иpull-down
резисторами? - Какую логику (
HIGH
илиLOW
) мы считываем с пина при нажатии кнопки, если он настроен какINPUT_PULLUP
? - Почему способы с
INPUT_PULLUP
иINPUT_PULLDOWN
часто являются предпочтительными? - Как изменить код так, чтобы при нажатии на вторую кнопку (с
pull-up
) светодиод не гас, а, наоборот, загорался?
Поздравляем с успешным освоением способов подключения кнопок! Теперь вы умеете и отправлять, и получать цифровые сигналы. Переходите к следующей лабораторной работе, чтобы научиться отлавливать не просто состояние кнопки, а сам момент её нажатия и отпускания.
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home