4.01. Цифровые сигналы и GPIO.md
В основе работы любого микроконтроллера лежит простой, но очень мощный принцип: он — цифровое устройство. Это означает, что он «думает» и оперирует не словами или плавными значениями, а всего лишь двумя состояниями: 1
и 0
. Для микроконтроллера весь мир сводится к языку из двух «слов»: «включено» и «выключено». Эти два состояния лежат в основе цифрового сигнала, с помощью которого плата общается с внешним миром.
Что такое цифровой сигнал?
В отличие от аналогового сигнала (например, звука или яркости света), который может плавно изменяться, цифровой сигнал дискретен. Он может принимать только два чётких значения:
- Высокий уровень (
HIGH
). Соответствует логической единице (1
). - Низкий уровень (
LOW
). Соответствует логическому нулю (0
).
На физическом уровне эти состояния представлены напряжением. Для Рудирона
это означает:
- Высокий уровень (
HIGH
) — это напряжение, близкое к напряжению питания микроконтроллера, то есть3.3
В. - Низкий уровень (
LOW
) — это напряжение, близкое к земле (GND
), то есть0
В.
Важная особенность
Рудирона
! Его пины толерантны к 5 В. Это значит, что, хотя сам микроконтроллер работает от 3.3 В, на его входы можно безопасно подавать сигналы с напряжением до 5 В. Это очень удобно, так как позволяет подключать огромное количество модулей и датчиков, рассчитанных на 5-вольтовую логику (например, от популярных платArduino
), без дополнительных преобразователей уровней.
Графически цифровой сигнал выглядит как последовательность прямоугольных импульсов — он либо на высоком уровне, либо на низком, без промежуточных значений.
Но как микроконтроллер отправляет и принимает эти сигналы? Через свои «уста и уши» — порты ввода-вывода GPIO
.
Порты GPIO
GPIO
(General-Purpose Input/Output) — это универсальные выводы на плате, которые работают с цифровыми сигналами. Каждый такой пин можно настроить на одну из двух ролей:
- Вывод (
OUTPUT
). Пин становится «ртом» микроконтроллера. Он отправляет сигнал вовне, устанавливая на выходе либоHIGH
(3.3 В), либоLOW
(0 В). Так можно зажечь светодиод или включить реле. - Ввод (
INPUT
). Пин становится «ухом» микроконтроллера. Он «слушает» напряжение, которое на него подаётся извне, и определяет, является ли оно высоким (HIGH
) или низким (LOW
). Так можно узнать, нажата ли кнопка.
Для управления этими процессами в ядре Рудирон
есть три ключевые функции: pinMode()
, digitalWrite()
и digitalRead()
.
Настройка пина — функция pinMode()
Прежде чем использовать пин, микроконтроллеру нужно сообщить его роль. Для этого используется функция pinMode()
, которую обычно вызывают один раз в блоке setup()
.
Синтаксис функции:
pinMode(номерПина, режим);
номерПина
- номер пинаРудирон
, который вы настраиваете.-
режим
- одно из ключевых слов, определяющих роль пина. -
Режим
OUTPUT
: Пин настроен на вывод сигнала. Он может подавать напряжение.const int ledPin = 5; void setup() { pinMode(ledPin, OUTPUT); // Пин 5 будет отправлять сигналы }
-
Режим
INPUT
: Пин настроен на приём сигнала. Он «слушает» входящее напряжение.const int buttonPin = 35; void setup() { pinMode(buttonPin, INPUT); // Пин 35 будет считывать сигналы }
Однако в этом режиме возникает проблема, если к пину ничего не подключено (например, кнопка не нажата), он находится в «плавающем» состоянии. Он ловит электрические помехи из воздуха, как антенна, и может считывать случайные значения —
HIGH
илиLOW
. Чтобы этого избежать, используют подтягивающие резисторы. -
Подтяжка пинов —
INPUT_PULLUP
иINPUT_PULLDOWN
, чтобы пин в режимеINPUT
всегда имел определённое состояние, его можно «подтянуть» к высокому или низкому уровню с помощью встроенных в микроконтроллер резисторов.INPUT_PULLUP
- пин внутренне подключается к 3.3 В через резистор. По умолчанию он всегда находится в состоянииHIGH
. Если к такому пину подключить кнопку, которая при нажатии соединяет его с землёй (GND
), то при нажатии пин перейдёт в состояниеLOW
. Это самый распространённый способ подключения кнопок в миреArduino
.INPUT_PULLDOWN
- пин внутренне подключается к GND. По умолчанию он всегдаLOW
. При подаче на него напряжения 3.3 В он перейдёт вHIGH
. Именно по такой схеме подключены встроенные кнопки на платеРудирон
.
// Для встроенных кнопок Рудирона используем INPUT_PULLDOWN pinMode(BUTTON_BUILTIN_1, INPUT_PULLDOWN);
Управление пином — функция digitalWrite()
Когда пин настроен как OUTPUT
, функция digitalWrite()
позволяет установить на нём нужный уровень сигнала.
Синтаксис функции:
digitalWrite(номерПина, состояние); // состояние - HIGH или LOW
Пример (мигание встроенным светодиодом L1):
void setup() {
pinMode(LED_BUILTIN_1, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN_1, HIGH); // Подаём 3.3 В, светодиод горит
delay(1000);
digitalWrite(LED_BUILTIN_1, LOW); // Подаём 0 В, светодиод гаснет
delay(1000);
}
Чтение состояния пина — функция digitalRead()
Когда пин настроен как INPUT
, функция digitalRead()
считывает его состояние.
Синтаксис функции:
состояниеПина = digitalRead(номерПина); // Вернёт HIGH или LOW
Пример (управление светодиодом L1 с помощью кнопки B1):
void setup() {
pinMode(LED_BUILTIN_1, OUTPUT);
// Встроенная кнопка B1 на Рудироне уже подтянута к земле (PULLDOWN)
pinMode(BUTTON_BUILTIN_1, INPUT_PULLDOWN);
}
void loop() {
// Считываем состояние кнопки B1
int buttonState = digitalRead(BUTTON_BUILTIN_1);
if (buttonState == HIGH) { // Если кнопка нажата (сигнал HIGH)
digitalWrite(LED_BUILTIN_1, HIGH); // Включаем светодиод
} else {
digitalWrite(LED_BUILTIN_1, LOW); // Иначе выключаем
}
}
Зачем это нужно?
GPIO
— это мост между цифровым миром микроконтроллера (его нулями и единицами) и физическим миром (светом, звуком, движением). Функции pinMode()
, digitalWrite()
и digitalRead()
— это ваш основной набор инструментов для строительства этого моста. Освоив их, вы сможете создавать интерактивные устройства, которые реагируют на действия пользователя и управляют внешними компонентами.
Теперь, когда вы знаете, как микроконтроллер работает с цифровыми сигналами, самое время решить, что делать дальше. Если вы готовы применить знания на практике, переходите к лабораторным работам, чтобы своими руками зажечь светодиоды. А если вам не терпится узнать, как управлять яркостью плавно, отправляйтесь в следующий параграф, где мы изучим аналоговые сигналы и ШИМ.
- Страницы
- 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