ПМК 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 через освоение методов вводавывода данных и организации последовательной коммуникации.

Задачи работы:

  1. Освоить основы программирования в среде Arduino IDE.

  2. Научиться настраивать и использовать последовательный порт для отладки и взаимодействия.

  3. Приобрести навыки управления цифровыми выходами (на примере светодиода).

  4. Освоить методы обработки пользовательского ввода с клавиатуры.

  5. Научиться создавать интерактивные системы с обратной связью.

  6. Сформировать умение анализировать и обрабатывать различные типы данных.

Учебные задачи

По завершении лабораторной работы студент должен:

Знать:

  • Принципы работы последовательного порта (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. Краткие Теоретические И Учебно-Методические

Материалы По Теме Работы

  1. Платформа Arduino Arduino — это открытая платформа для прототипирования на основе

микроконтроллеров. Состоит из:

  • Аппаратной части — плата с микроконтроллером (чаще ATmega328P)

  • Программной части — среда разработки Arduino IDE Основные характеристики Arduino Uno:

  • Микроконтроллер: ATmega328P

  • Рабочее напряжение: 5 В

  • Цифровые пины: 14 (из них 6 ШИМ)

  • Аналоговые входы: 6

  • Память: 32 КБ Flash, 2 КБ SRAM, 1 КБ EEPROM

  • Тактовая частота: 16 МГц

  1. Структура программы Arduino Каждая программа (скетч) состоит из двух обязательных функций:

void setup() {

// Выполняется один раз при старте // Инициализация пинов, настройка периферии }

void loop() {

// Выполняется циклически после setup() // Основная логика программы }

  1. Цифровые входы/выходы Настройка пинов:

pinMode(pin, MODE); // MODE: INPUT, OUTPUT, INPUT_PULLUP

Чтение/запись:

digitalRead(pin); // Чтение: HIGH/LOW

digitalWrite(pin, value); // Запись: HIGH/LOW

Встроенный светодиод: подключен к пину 13.

  1. Последовательный порт (UART) Инициализация:

Serial.begin(speed); // speed: 9600, 115200 и т.д.

Методы передачи данных:

Serial.print(data); // Вывод без перевода строки

Serial.println(data); // Вывод с переводом строки

Serial.write(data); // Вывод бинарных данных

Методы приема данных:

Serial.available(); // Количество байт в буфере

Serial.read(); // Чтение одного байта

Serial.readString(); // Чтение строки

Serial.parseInt(); // Чтение целого числа

  1. Работа со временем Блокирующие задержки:

delay(ms); // Задержка в миллисекундах

delayMicroseconds(us); // Задержка в микросекундах

Неблокирующий timing (рекомендуется):

unsigned long currentMillis = millis(); // Время с начала работы

if (currentMillis - previousMillis >= interval) {

// Выполнить действие

previousMillis = currentMillis;

}

  1. Типы данных и переменные Основные типы данных:

boolean // Логический (true/false)

byte // 0-255

int // Целое (-32768 до 32767)

unsigned int // 0-65535 long // Большое целое

float // Число с плавающей точкой

char // Символ

String // Строка (объект)

Области видимости:

локальная // Внутри функции глобальная // Вне всех функций статическая // Сохраняет значение между вызовами

  1. Управляющие конструкции Условные операторы:

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);

  1. Функции Объявление функций:

returnType functionName(parameters) { // Тело функции

return value;

}

Пример:

int sum(int a, int b) {

return a + b;

}

  1. Массивы и строки Массивы:

int numbers[5] = {1, 2, 3, 4, 5};

char text[] = "Hello";

Работа со строками:

String str = "Arduino";

str.length(); // Длина строки str.toUpperCase(); // В верхний регистр str.indexOf(«du»); // Поиск подстроки

  1. Основные алгоритмы обработки ввода Обработка одиночных символов:

if (Serial.available() > 0) {

char command = Serial.read();

// Обработка команды }

Обработка чисел:

int number = Serial.parseInt();

Обработка строк:

String input = Serial.readStringUntil('\n');

input.trim(); // Удаление пробелов

  1. Принципы отладки Методы отладки:

  2. Serial Monitor — вывод состояния переменных

  3. Светодиодная индикация — визуализация состояний

  4. Контрольные точки — вывод сообщений в ключевых точках Пример отладочного вывода:

Serial.print("Переменная x = ");

Serial.println(x);

Serial.print("Время: ");

Serial.println(millis());

  1. Рекомендации по программированию Хорошие практики:

Используйте понятные имена переменных, комментируйте сложные участки кода, избегайте блокирующих задержек в основном цикле, проверяйте границы значений при вводе, используйте константы вместо «магических чисел».

Пример:

const int LED_PIN = 13; // Вместо цифры 13

const long BLINK_INTERVAL = 1000; // Интервал мигания

void setup() {

pinMode(LED_PIN, OUTPUT);

Serial.begin(9600);

}

2. Задания Для Выполнения

Задача 1: «Знакомство с монитором порта»

Цель: Настроить последовательный порт и выводить простые сообщения.

Задание:

  1. В функции setup() инициализируйте последовательное соединение на скорости 9600 бод

  2. Выводите в монитор порта сообщение «Arduino готов к работе!»

  3. В функции loop() выводите номер текущей секунды работы каждую секунду

Ожидаемый результат:

Arduino готов к работе! Секунда: 1 Секунда: 2 Секунда: 3

Задача 2: «Мигающий светодиод с отчетом»

Цель: Управление светодиодом с выводом статуса в порт.

Задание:

  1. Настройте пин 13 как выход

  2. Настройте последовательный порт

  3. В цикле loop() включайте светодиод, выводите «СВЕТОДИОД ВКЛ», ждите 1 секунду

  4. Выключайте светодиод, выводите «СВЕТОДИОД ВЫКЛ», ждите 1 секунду

Ожидаемый результат: Светодиод мигает, в мониторе порта:

Светодиод Вкл

Светодиод Выкл

Светодиод Вкл

Светодиод Выкл

Задача 3: «Анализатор ввода»

Цель: Обработка простых команд из монитора порта.

Задание:

  1. При запуске выведите меню: «Команды: 1-вкл, 0-выкл, s-статус»
  2. При получении символа:
  • '1' - включить светодиод, вывести «Включено»
  • '0' - выключить светодиод, вывести «Выключено»
  • 's' - вывести текущий статус светодиода
  • другой символ - «Неизвестная команда» Ожидаемый результат:

Команды: 1-вкл, 0-выкл, s-статус >1 Включено >s Статус: ВКЛ >2 Неизвестная команда

Задача 4: «Светофор»

Цель: Реализация последовательности с выводом этапов.

Задание:

  1. Создайте последовательность: красный (3 сек) → желтый (1 сек) → зеленый (3 сек)

  2. Используйте только встроенный светодиод на пине 13

  3. Выводите в порт текущий цвет и оставшееся время Ожидаемый результат:

КРАСНЫЙ - 3 сек КРАСНЫЙ - 2 сек КРАСНЫЙ - 1 сек ЖЕЛТЫЙ - 1 сек ЗЕЛЕНЫЙ - 3 сек

Задача 5: «Частотный регулятор»

Цель: Управление частотой мигания через последовательный порт.

Задание:

  1. Светодиод мигает с частотой 1 Гц (0.5 сек вкл, 0.5 сек выкл)
  2. При вводе числа от 1 до 10 меняйте частоту мигания
  3. Выводите текущую частоту при изменении
  4. При вводе 's' выводите текущие настройки Ожидаемый результат:

Частота: 1 Гц >5 Установлена частота: 5 Гц >s Текущая частота: 5 Гц, период: 200 мс

Задача 6: «Счетчик нажатий»

Цель: Подсчет и анализ вводимых команд.

Задание:

  1. Считайте количество введенных команд '1' и '0'
  2. При вводе 's' выводите статистику:
  • Общее количество команд
  • Количество включений/выключений
  • Процентное соотношение
  1. При вводе 'r' сбрасывайте статистику Ожидаемый результат:

1 >0 >1 >1 >s Всего команд: 4 Включений: 3 (75%) Выключений: 1 (25%) >r Статистика сброшена

Задача 7: «Моргалка с памятью»

Цель: Реализация различных режимов мигания.

Задание:

  1. Реализуйте режимы по командам:
  • '1' - обычное мигание (1 Гц)
  • '2' - быстрое мигание (5 Гц)
  • '3' - двойное мигание (2 коротких вспышки)
  • '0' - выключить
  1. Запоминайте последний активный режим
  2. При вводе 'l' выводите список доступных режимов Ожидаемый результат:

l Режимы: 1-норма, 2-быстро, 3-двойное, 0-выкл >2 Установлен режим: быстрое мигание

Задача 8: «Текстовый анализатор»

Цель: Анализ вводимых текстовых строк.

Задание:

  1. Принимайте целые строки (используйте readStringUntil('\n'))
  2. Анализируйте введенную строку:
  • Выводите длину строки
  • Количество цифр и букв
  • Преобразуйте в верхний регистр
  1. При вводе «led on/off» управляйте светодиодом Ожидаемый результат:

Hello123 Длина: 8 символов Буквы: 5, Цифры: 3

Hello123

led on Светодиод включен

Задача 9: «Система мониторинга»

Цель: Создание простой системы сбора и вывода данных.

Задание:

  1. Раз в 2 секунды выводите системную информацию:
  • Время работы (секунды)
  • Количество принятых команд
  • Текущий статус светодиода
  • Значение с аналогового пина A0
  1. По команде 'stop' приостанавливайте вывод
  2. По команде 'start' возобновляйте вывод Ожидаемый результат:

Время: 5с, Команд: 3, Светодиод: ВКЛ, A0: 512 Время: 7с, Команд: 3, Светодиод: ВКЛ, A0: 510 >stop Мониторинг остановлен >start Мониторинг возобновлен

Задача 10: «Интерактивный тренажер Морзе»

Цель: Комплексная задача с обработкой ввода и управлением выводом.

Задание:

  1. Реализуйте кодировку букв в код Морзе (3-4 буквы для примера)
  2. При вводе буквы мигайте светодиодом соответствующим кодом
  3. Выводите в порт:
  • Введенную букву
  • Код Морзе (точки-тире)
  • Визуализацию сигнала
  1. Реализуйте режим тренировки - Arduino «диктует» случайные буквы Пример кода Морзе:

• A: .-

• B: -...

• C: -.-.

Ожидаемый результат:

B Буква: B Код: -... Сигнал: _*** >train Тренировка: A

Отчет должен содержать:

  1. Титульный лист

2. Цель работы

  1. Задание по варианту
  2. Схемы подключения (если требуются)
  3. Листинги программ с комментариями
  4. Результаты работы (скриншоты Serial Monitor)
  5. Выводы по каждой задаче

8. Ответы на контрольные вопросы

Отчет оформляется на листах формата А4 с отступами: левое – 3 , правое – 1,5, верхний и нижний – 2 см. Отчет выполняется шрифтом Times New Roman 14, интервал между строками 1,5, отступ абзаца 1,25, выравнивание текста - по полям. Подписи к рисункам и сами рисунки – по центру.


Практическая работа №2 →

Оригинал материала на GitHub