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%»)?


Молодцы, вы научились создавать функции, чтобы Рудирон выполнял задачи эффективно и организованно! Если какая-то задача не получилась, вы можете посмотреть решения в файле с ответами. Эта глава подходит к концу — вы готовы к новым экспериментам с Рудироном