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