3.06.1. Практикум.md
Эти задачи помогут вам освоить функции для управления платой Рудирон. Вы будете писать программы для реальных ситуаций, таких как управление освещением или проверка датчиков, и проверять результаты через монитор порта. Думайте, как использовать функции, чтобы сделать код компактнее и понятнее, и попробуйте самостоятельно написать его!
Задача №1. Умное освещение
Введение
Вы создаёте систему умного дома на Рудироне. Свет в комнате должен включаться, только если там есть люди и на часах время с 18:00 до 23:00. Напишите функцию, которая будет проверять эти условия.
Задание
Напишите программу, которая определяет функцию controlLight() с двумя параметрами: isOccupied (тип bool) и hour (тип int). Функция должна выводить «Свет включён», если в комнате есть люди (isOccupied == true) и hour находится в диапазоне от 18 до 23, иначе — «Свет выключен». В setup() вызовите эту функцию со значениями true и 20.
Вопросы для размышления:
1. Почему функция controlLight() использует два параметра?
2. Что произойдёт, если вызвать функцию с hour = 17?
3. Как добавить в логику функции третье условие, например, isDaylight (сейчас день)?
Задача №2. Контроль температуры
Введение
Ваш умный холодильник на Рудироне должен постоянно следить за температурой. Напишите функцию, которая проверяет, находится ли температура в безопасном диапазоне (от 2 до 8 °C), и возвращает результат.
Задание
Напишите программу, которая определяет функцию isTempSafe() с параметром temp (тип float). Функция должна возвращать true, если temp находится в диапазоне от 2 до 8 включительно, и false в противном случае. В setup() вызовите функцию со значением 6.5 и, в зависимости от результата, выведите в монитор порта «Температура безопасна» или «Температура вне диапазона».
Вопросы для размышления:
1. Почему функция isTempSafe() возвращает значение типа bool?
2. Что произойдёт, если передать в функцию значение 9.0?
3. Как можно было бы изменить функцию, чтобы она возвращала не true/false, а текстовое сообщение?
Задача №3. Система безопасности
Введение
Вы программируете систему безопасности на Рудироне, которая следит за состоянием трёх дверей. Напишите функцию, которая принимает массив состояний дверей и выводит их статус, предупреждая об открытых.
Задание
Напишите программу, которая определяет функцию checkDoors() с параметром doors (массив типа bool размером 3). Функция должна использовать цикл for, чтобы вывести статус каждой двери (например, «Дверь 1: Закрыта»). Если дверь открыта (true), нужно добавить сообщение «Тревога: дверь открыта!». В setup() создайте массив doors = {false, true, false} и вызовите функцию.
Вопросы для размышления:
1. Почему функция checkDoors() принимает массив как параметр?
2. Что произойдёт, если все двери будут закрыты (false, false, false)?
3. Как добавить в функцию подсчёт и возврат общего количества открытых дверей?
Задача №4. Автоматический полив
Введение
Ваша умная теплица на Рудироне следит за влажностью почвы. Напишите функцию, которая проверяет уровень влажности и сообщает, что нужно делать.
Задание
Напишите программу, которая определяет функцию checkMoisture() с параметром moisture (тип int). Функция должна выводить:
- «Полив нужен», если
moisture < 40. - «Влажность нормальная», если
moistureот 40 до 70. - «Влажность высокая», если
moisture > 70. Вsetup()вызовите функцию со значением35.
Вопросы для размышления:
1. Почему в этой функции удобно использовать цепочку if-else if-else?
2. Что произойдёт, если передать в функцию значение 50?
3. Как можно изменить функцию, чтобы она возвращала число (например, 1 - поливать, 0 - не поливать, -1 - слишком влажно)?
Задача №5. Диагностика робота
Введение
Ваш робот на Рудироне должен периодически проверять свои системы: батарею, датчики и моторы. Напишите три отдельные функции для вывода сообщений о состоянии каждой системы.
Задание
Напишите программу, которая определяет три функции без параметров: checkBattery(), checkSensors() и checkMotors(). Каждая из них должна просто выводить в монитор порта сообщение о своём статусе (например, «Батарея: ОК»). В setup() используйте цикл for, чтобы вызвать каждую функцию дважды с паузой в 1 секунду между вызовами.
Вопросы для размышления:
1. Почему удобно разделить проверки на три разные функции?
2. Что произойдёт, если увеличить количество повторений в цикле до трёх?
3. Как можно добавить в функции параметры, чтобы они могли сообщать о разных состояниях (например, checkBattery(85) выводила бы «Батарея: 85%»)?
Молодцы, вы научились создавать функции, чтобы Рудирон выполнял задачи эффективно и организованно! Если какая-то задача не получилась, вы можете посмотреть решения в файле с ответами. Эта глава подходит к концу — вы готовы к новым экспериментам с Рудироном
- Страницы
- 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