ПМК 3 курс Практические задания 01 Практическая работа 1 - BysonHunter/Tavrich_college GitHub Wiki
🏠 Главная · Программирование микроконтроллеров · 3 курс · Практические работы по программированию микроконтроллеров — 3 курс
Практическая работа №1
Тема: «Программирование ввода-вывода и последовательной коммуникации в среде Arduino IDE»
Текст описания, целей и постановки заданий сохранён по исходному PDF. Технические замечания ниже исправляют или уточняют только обнаруженные неоднозначности и ошибки.
Технические корректировки и уточнения
- Кодовые примеры с текстовыми строками приведены с обычными кавычками
"...", а не типографскими «...» — так код компилируется в Arduino IDE. - Встроенный светодиод на D13 относится к Arduino Uno/Nano; для переносимого кода предпочтительно использовать
LED_BUILTIN. - В задачах, где требуется одновременно реагировать на ввод и выполнять периодические действия, рекомендуется
millis()вместо длительныхdelay().
Описание работы и задания
коммуникации в среде Arduino IDE»
Учебная цель: Сформировать практические навыки программирования микроконтроллеров на платформе Arduino через освоение методов вводавывода данных и организации последовательной коммуникации.
Задачи работы:
-
Освоить основы программирования в среде Arduino IDE.
-
Научиться настраивать и использовать последовательный порт для отладки и взаимодействия.
-
Приобрести навыки управления цифровыми выходами (на примере светодиода).
-
Освоить методы обработки пользовательского ввода с клавиатуры.
-
Научиться создавать интерактивные системы с обратной связью.
-
Сформировать умение анализировать и обрабатывать различные типы данных.
Учебные задачи
По завершении лабораторной работы студент должен:
Знать:
-
Принципы работы последовательного порта (UART) в Arduino
-
Методы инициализации и конфигурирования цифровых входов/выходов
-
Синтаксис и основные функции языка программирования Arduino
-
Способы обработки прерываний и временных интервалов
-
Методы отладки программ с использованием монитора порта Уметь:
-
Настраивать последовательную коммуникацию с компьютером
-
Программировать цифровые выходы для управления внешними устройствами
-
Обрабатывать данные, вводимые пользователем через монитор порта
-
Реализовывать конечные автоматы и различные режимы работы
-
Анализировать и преобразовывать различные типы данных
-
Создавать интерактивные системы с обратной связью Владеть:
-
Навыками программирования на языке C++ в среде Arduino IDE
-
Методами отладки программ с использованием Serial Monitor
-
Технологиями обработки пользовательского ввода
-
Навыками создания многорежимных систем управления
-
Методами анализа и визуализации данных в реальном времени Структура лабораторной работы Работа состоит из 10 последовательных заданий, сгруппированных по
уровням сложности:
Блок 1: базовый уровень (Задачи 1-3)
Задачи 1-3 направлены на освоение основных принципов программирования Arduino
Блок 2: промежуточный уровень (Задачи 4-7)
Задачи 4-7 развивают навыки создания сложных алгоритмов
Блок 3: продвинутый уровень (Задачи 8-10)
Задачи 8-10 направлены на создание комплексных систем
Критерии оценки
На «отлично» (5):
-
Выполнены все 10 задач
-
Код соответствует стандартам оформления
-
Реализованы все дополнительные функции
-
Программы работают стабильно без ошибок На «хорошо» (4):
-
Выполнены задачи 1-8
-
Основной функционал реализован корректно
-
Возможны незначительные ошибки в сложных задачах На «удовлетворительно» (3):
-
Выполнены задачи 1-5
-
Базовый функционал работает корректно
-
Понимаются основные принципы программирования На «неудовлетворительно» (2):
-
Выполнено менее 5 задач
-
Код содержит критические ошибки
-
Отсутствует понимание базовых принципов
Оборудование и программное обеспечение
Аппаратное обеспечение:
-
Плата Arduino Uno/Nano
-
USB-кабель для программирования
-
Компьютер с ОС Windows/Linux/MacOS Программное обеспечение:
-
Arduino IDE 2.x или выше
-
Драйверы CH340 (для китайских клонов Arduino)
-
Текстовый редактор для ведения отчета
1. Краткие Теоретические И Учебно-Методические
Материалы По Теме Работы
- Платформа Arduino Arduino — это открытая платформа для прототипирования на основе
микроконтроллеров. Состоит из:
-
Аппаратной части — плата с микроконтроллером (чаще ATmega328P)
-
Программной части — среда разработки Arduino IDE Основные характеристики Arduino Uno:
-
Микроконтроллер: ATmega328P
-
Рабочее напряжение: 5 В
-
Цифровые пины: 14 (из них 6 ШИМ)
-
Аналоговые входы: 6
-
Память: 32 КБ Flash, 2 КБ SRAM, 1 КБ EEPROM
-
Тактовая частота: 16 МГц
- Структура программы Arduino Каждая программа (скетч) состоит из двух обязательных функций:
void setup() {
// Выполняется один раз при старте // Инициализация пинов, настройка периферии }
void loop() {
// Выполняется циклически после setup() // Основная логика программы }
- Цифровые входы/выходы Настройка пинов:
pinMode(pin, MODE); // MODE: INPUT, OUTPUT, INPUT_PULLUP
Чтение/запись:
digitalRead(pin); // Чтение: HIGH/LOW
digitalWrite(pin, value); // Запись: HIGH/LOW
Встроенный светодиод: подключен к пину 13.
- Последовательный порт (UART) Инициализация:
Serial.begin(speed); // speed: 9600, 115200 и т.д.
Методы передачи данных:
Serial.print(data); // Вывод без перевода строки
Serial.println(data); // Вывод с переводом строки
Serial.write(data); // Вывод бинарных данных
Методы приема данных:
Serial.available(); // Количество байт в буфере
Serial.read(); // Чтение одного байта
Serial.readString(); // Чтение строки
Serial.parseInt(); // Чтение целого числа
- Работа со временем Блокирующие задержки:
delay(ms); // Задержка в миллисекундах
delayMicroseconds(us); // Задержка в микросекундах
Неблокирующий timing (рекомендуется):
unsigned long currentMillis = millis(); // Время с начала работы
if (currentMillis - previousMillis >= interval) {
// Выполнить действие
previousMillis = currentMillis;
}
- Типы данных и переменные Основные типы данных:
boolean // Логический (true/false)
byte // 0-255
int // Целое (-32768 до 32767)
unsigned int // 0-65535 long // Большое целое
float // Число с плавающей точкой
char // Символ
String // Строка (объект)
Области видимости:
локальная // Внутри функции глобальная // Вне всех функций статическая // Сохраняет значение между вызовами
- Управляющие конструкции Условные операторы:
if (condition) { ... }
else if (condition) { ... }
else { ... }
switch (variable) {
case value1: ... break;
case value2: ... break;
default: ... break; }
Циклы:
for (int i = 0; i < count; i++) { ... }
while (condition) { ... }
do { ... } while (condition);
- Функции Объявление функций:
returnType functionName(parameters) { // Тело функции
return value;
}
Пример:
int sum(int a, int b) {
return a + b;
}
- Массивы и строки Массивы:
int numbers[5] = {1, 2, 3, 4, 5};
char text[] = "Hello";
Работа со строками:
String str = "Arduino";
str.length(); // Длина строки str.toUpperCase(); // В верхний регистр str.indexOf(«du»); // Поиск подстроки
- Основные алгоритмы обработки ввода Обработка одиночных символов:
if (Serial.available() > 0) {
char command = Serial.read();
// Обработка команды }
Обработка чисел:
int number = Serial.parseInt();
Обработка строк:
String input = Serial.readStringUntil('\n');
input.trim(); // Удаление пробелов
-
Принципы отладки Методы отладки:
-
Serial Monitor — вывод состояния переменных
-
Светодиодная индикация — визуализация состояний
-
Контрольные точки — вывод сообщений в ключевых точках Пример отладочного вывода:
Serial.print("Переменная x = ");
Serial.println(x);
Serial.print("Время: ");
Serial.println(millis());
- Рекомендации по программированию Хорошие практики:
Используйте понятные имена переменных, комментируйте сложные участки кода, избегайте блокирующих задержек в основном цикле, проверяйте границы значений при вводе, используйте константы вместо «магических чисел».
Пример:
const int LED_PIN = 13; // Вместо цифры 13
const long BLINK_INTERVAL = 1000; // Интервал мигания
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
2. Задания Для Выполнения
Задача 1: «Знакомство с монитором порта»
Цель: Настроить последовательный порт и выводить простые сообщения.
Задание:
-
В функции setup() инициализируйте последовательное соединение на скорости 9600 бод
-
Выводите в монитор порта сообщение «Arduino готов к работе!»
-
В функции loop() выводите номер текущей секунды работы каждую секунду
Ожидаемый результат:
Arduino готов к работе! Секунда: 1 Секунда: 2 Секунда: 3
Задача 2: «Мигающий светодиод с отчетом»
Цель: Управление светодиодом с выводом статуса в порт.
Задание:
-
Настройте пин 13 как выход
-
Настройте последовательный порт
-
В цикле loop() включайте светодиод, выводите «СВЕТОДИОД ВКЛ», ждите 1 секунду
-
Выключайте светодиод, выводите «СВЕТОДИОД ВЫКЛ», ждите 1 секунду
Ожидаемый результат: Светодиод мигает, в мониторе порта:
Светодиод Вкл
Светодиод Выкл
Светодиод Вкл
Светодиод Выкл
Задача 3: «Анализатор ввода»
Цель: Обработка простых команд из монитора порта.
Задание:
- При запуске выведите меню: «Команды: 1-вкл, 0-выкл, s-статус»
- При получении символа:
- '1' - включить светодиод, вывести «Включено»
- '0' - выключить светодиод, вывести «Выключено»
- 's' - вывести текущий статус светодиода
- другой символ - «Неизвестная команда» Ожидаемый результат:
Команды: 1-вкл, 0-выкл, s-статус >1 Включено >s Статус: ВКЛ >2 Неизвестная команда
Задача 4: «Светофор»
Цель: Реализация последовательности с выводом этапов.
Задание:
-
Создайте последовательность: красный (3 сек) → желтый (1 сек) → зеленый (3 сек)
-
Используйте только встроенный светодиод на пине 13
-
Выводите в порт текущий цвет и оставшееся время Ожидаемый результат:
КРАСНЫЙ - 3 сек КРАСНЫЙ - 2 сек КРАСНЫЙ - 1 сек ЖЕЛТЫЙ - 1 сек ЗЕЛЕНЫЙ - 3 сек
Задача 5: «Частотный регулятор»
Цель: Управление частотой мигания через последовательный порт.
Задание:
- Светодиод мигает с частотой 1 Гц (0.5 сек вкл, 0.5 сек выкл)
- При вводе числа от 1 до 10 меняйте частоту мигания
- Выводите текущую частоту при изменении
- При вводе 's' выводите текущие настройки Ожидаемый результат:
Частота: 1 Гц >5 Установлена частота: 5 Гц >s Текущая частота: 5 Гц, период: 200 мс
Задача 6: «Счетчик нажатий»
Цель: Подсчет и анализ вводимых команд.
Задание:
- Считайте количество введенных команд '1' и '0'
- При вводе 's' выводите статистику:
- Общее количество команд
- Количество включений/выключений
- Процентное соотношение
- При вводе 'r' сбрасывайте статистику Ожидаемый результат:
1 >0 >1 >1 >s Всего команд: 4 Включений: 3 (75%) Выключений: 1 (25%) >r Статистика сброшена
Задача 7: «Моргалка с памятью»
Цель: Реализация различных режимов мигания.
Задание:
- Реализуйте режимы по командам:
- '1' - обычное мигание (1 Гц)
- '2' - быстрое мигание (5 Гц)
- '3' - двойное мигание (2 коротких вспышки)
- '0' - выключить
- Запоминайте последний активный режим
- При вводе 'l' выводите список доступных режимов Ожидаемый результат:
l Режимы: 1-норма, 2-быстро, 3-двойное, 0-выкл >2 Установлен режим: быстрое мигание
Задача 8: «Текстовый анализатор»
Цель: Анализ вводимых текстовых строк.
Задание:
- Принимайте целые строки (используйте readStringUntil('\n'))
- Анализируйте введенную строку:
- Выводите длину строки
- Количество цифр и букв
- Преобразуйте в верхний регистр
- При вводе «led on/off» управляйте светодиодом Ожидаемый результат:
Hello123 Длина: 8 символов Буквы: 5, Цифры: 3
Hello123
led on Светодиод включен
Задача 9: «Система мониторинга»
Цель: Создание простой системы сбора и вывода данных.
Задание:
- Раз в 2 секунды выводите системную информацию:
- Время работы (секунды)
- Количество принятых команд
- Текущий статус светодиода
- Значение с аналогового пина A0
- По команде 'stop' приостанавливайте вывод
- По команде 'start' возобновляйте вывод Ожидаемый результат:
Время: 5с, Команд: 3, Светодиод: ВКЛ, A0: 512 Время: 7с, Команд: 3, Светодиод: ВКЛ, A0: 510 >stop Мониторинг остановлен >start Мониторинг возобновлен
Задача 10: «Интерактивный тренажер Морзе»
Цель: Комплексная задача с обработкой ввода и управлением выводом.
Задание:
- Реализуйте кодировку букв в код Морзе (3-4 буквы для примера)
- При вводе буквы мигайте светодиодом соответствующим кодом
- Выводите в порт:
- Введенную букву
- Код Морзе (точки-тире)
- Визуализацию сигнала
- Реализуйте режим тренировки - Arduino «диктует» случайные буквы Пример кода Морзе:
• A: .-
• B: -...
• C: -.-.
Ожидаемый результат:
B Буква: B Код: -... Сигнал: _*** >train Тренировка: A
Отчет должен содержать:
- Титульный лист
2. Цель работы
- Задание по варианту
- Схемы подключения (если требуются)
- Листинги программ с комментариями
- Результаты работы (скриншоты Serial Monitor)
- Выводы по каждой задаче
8. Ответы на контрольные вопросы
Отчет оформляется на листах формата А4 с отступами: левое – 3 , правое – 1,5, верхний и нижний – 2 см. Отчет выполняется шрифтом Times New Roman 14, интервал между строками 1,5, отступ абзаца 1,25, выравнивание текста - по полям. Подписи к рисункам и сами рисунки – по центру.