4.08.1. Лабораторная работа №4.8.1.md
Командный центр
Тема работы
До сих пор мы использовали последовательный порт (Serial) в основном для односторонней связи — Рудирон отправлял нам отладочную информацию. В этой лабораторной работе мы организуем полноценный двусторонний диалог! Мы создадим свой собственный текстовый протокол и напишем программу, которая будет принимать команды с компьютера и управлять целой группой устройств: светодиодом, RGB-светодиодом и вентилятором.
Цель
- Научиться принимать и обрабатывать команды, отправленные с компьютера через монитор порта.
- Разработать и реализовать простой текстовый протокол для управления устройствами.
- Освоить функции
Serial.readStringUntil()иString.substring()для парсинга (разбора) команд. - Создать многофункциональное устройство, управляемое удалённо.
Оборудование и материалы
- Отладочная плата
Рудирон. - Макетная плата и модуль питания, батарея 9В.
- 1 вентилятор и 1 биполярный
NPN-транзистор(например, BC337). - 1
RGB-светодиоди 3 резистора по 220 Ом. - 1 обычный светодиод и 1 резистор 220 Ом.
- 1 резистор на 1 кОм (для базы транзистора).
- Соединительные провода и USB-кабель.
- Компьютер с
Arduino IDE.
Ход работы
-
Разработка нашего протокола
Чтобы
Рудиронпонимал наши команды, нужен строгий формат — протокол. Наш протокол будет очень простым - команда состоит из одной буквы-идентификатора и числовых параметров.L<яркость>— управление обычным светодиодом. Пример:L128— установить яркость 128 (из 255).V<скорость>— управление вентилятором. Пример:V255— включить вентилятор на полную скорость.C<красный>,<зелёный>,<синий>— управление цветом RGB-светодиода. Пример:C255,0,128— установить пурпурный цвет.
-
Сборка схемы
Мы соберём большую схему, объединяющую несколько наших прошлых проектов.
- Питание. Используйте внешний источник 5В от модуля питания. Соедините земли (
GND)Рудиронаи модуля питания. - Вентилятор. Подключите через
NPN-транзисторк пину 20.- Красный провод (
+) вентилятора — к шине 5V. - Чёрный провод (
−) вентилятора — к Коллектору (C) транзистора. - Эмиттер (E) транзистора — к
GND. - Базу (B) транзистора через резистор 1 кОм — к пину 20
Рудирона.
- Красный провод (
- RGB-светодиод. Подключите красный, зелёный и синий каналы через резисторы 220 Ом к ШИМ-пинам 5, 7, 8. Общий катод — к
GND. - Обычный светодиод. Подключите через резистор 220 Ом к ШИМ-пину 12.

- Питание. Используйте внешний источник 5В от модуля питания. Соедините земли (
-
Написание и загрузка кода
- Установите перемычку
PRG | RUNв положениеPRG. -
В
Arduino IDEвведите следующий код:// Пины для устройств const int ledPin = 12; const int fanPin = 20; const int redPin = 5; const int greenPin = 7; const int bluePin = 8; void setup() { Serial.begin(115200); // Используем высокую скорость pinMode(ledPin, OUTPUT); pinMode(fanPin, OUTPUT); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); Serial.println("Командный центр Рудирон готов!"); Serial.println("Примеры команд: L128, V255, C255,0,128"); } void loop() { // Проверяем, пришла ли новая команда с компьютера if (Serial.available() > 0) { // Читаем всю строку до символа новой строки String input = Serial.readStringUntil('\n'); // Удаляем возможные пробелы в начале и конце input.trim(); // Получаем первый символ - это наша команда char command = input.charAt(0); // Получаем остальную часть строки - это параметры String params = input.substring(1); // Используем switch для выбора действия switch (command) { case 'L': { int brightness = params.toInt(); analogWrite(ledPin, brightness); Serial.println("OK! Яркость светодиода изменена."); break; } case 'V': { int speed = params.toInt(); analogWrite(fanPin, speed); Serial.println("OK! Скорость вентилятора изменена."); break; } case 'C': { // Парсинг RGB - это чуть сложнее int firstComma = params.indexOf(','); int secondComma = params.indexOf(',', firstComma + 1); if (firstComma > 0 && secondComma > 0) { String r_str = params.substring(0, firstComma); String g_str = params.substring(firstComma + 1, secondComma); String b_str = params.substring(secondComma + 1); int r = r_str.toInt(); int g = g_str.toInt(); int b = b_str.toInt(); analogWrite(redPin, r); analogWrite(greenPin, g); analogWrite(bluePin, b); Serial.println("OK! Цвет RGB изменен."); } else { Serial.println("Ошибка! Неверный формат цвета. Пример: C255,0,128"); } break; } default: Serial.println("Ошибка! Неизвестная команда."); break; } } } - Нажмите кнопку «Upload», чтобы загрузить код на плату.
- Установите перемычку
-
Проверка работы
- Откройте Монитор последовательного порта (
Tools → Serial Monitor). - В правом нижнем углу установите скорость 115200 бод и режим Newline.
- Вводите команды в строку отправки и нажимайте Enter:
L255— светодиод загорится на полную яркость.V128— вентилятор закрутится на половине скорости.C0,255,255— RGB-светодиод станет голубым.V0— вентилятор остановится.
- Откройте Монитор последовательного порта (
Результаты
Вы создали универсальный пульт управления! Ваша программа принимает текстовые команды, анализирует их и выполняет соответствующие действия, управляя сразу несколькими устройствами.
Анализ результатов
Serial.readStringUntil('\n'). Эта удобная функция читает все символы из порта, пока не встретит символ новой строки, который отправляется при нажатии Enter в мониторе порта.input.charAt(0). Получаем первый символ строки-команды.input.substring(1). «Вырезаем» из строки всё, кроме первого символа, чтобы получить параметры.params.toInt(). Преобразует строку с параметрами в целое число.params.indexOf(','). Для командыCмы ищем позиции запятых, чтобы разделить строку на три части — для красного, зелёного и синего.
Выводы
В этой лабораторной работе вы освоили двусторонний обмен данными с Рудироном через UART. Вы научились создавать простые текстовые протоколы, которые являются основой для взаимодействия с другими микроконтроллерами, компьютерами или даже веб-сервисами.
Вопросы для самопроверки
- Что такое протокол связи?
- Почему для этого проекта мы выбрали высокую скорость порта (
115200)? - Как работает парсинг команды для
RGB-светодиода? - Как можно улучшить наш протокол? (Подсказка, что, если пользователь введёт
L500илиC100,200без третьей цифры?). - Придумайте и опишите новую команду для нашего протокола. Например, команду
B(Blink), которая заставит обычный светодиод мигнуть 5 раз.
Вы научились создавать собственный язык для общения с Рудироном! В следующем параграфе мы изучим интерфейс I2C, который позволяет подключить к микроконтроллеру целую гирлянду датчиков, используя всего два провода.
- Страницы
- 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