3.04.1. Практикум.md


Эти задачи помогут вам освоить циклы while и for для управления платой Рудирон. Вы будете писать программы для реальных ситуаций, таких как подсчёт нажатий кнопки или симуляция показаний датчика, и проверять результаты через монитор порта. Думайте, как использовать циклы, чтобы автоматизировать повторяющиеся задачи, и попробуйте самостоятельно написать код!

Задача №1. Подсчёт до лимита

Введение
Вы создаёте устройство на Рудироне, которое отсчитывает определённое количество событий, например, считает посетителей на выставке. Программа должна считать до тех пор, пока не будет достигнут лимит в 5 событий, и выводить каждое значение в монитор порта.

Задание
Напишите программу, которая создаёт переменную count типа int со значением 0. Используйте цикл while, чтобы в каждой итерации увеличивать count на 1 и выводить его новое значение. Цикл должен остановиться, как только count достигнет 5.

Вопросы для размышления:
1. Почему для этой задачи подходит цикл while?
2. Что произойдёт, если изменить условие с count < 5 на count <= 5?
3. Как можно вывести сообщение «Лимит достигнут» после завершения цикла?

Задача №2. Сигнал тревоги

Введение
Ваш робот на Рудироне должен подать сигнал тревоги, мигнув светодиодом ровно 4 раза. Программа должна имитировать это мигание, выводя состояние светодиода («Включён» или «Выключён») в монитор порта. Дайте роботу возможность сообщить о проблеме!

Задание
Напишите программу, которая использует цикл for, чтобы 4 раза вывести в монитор порта сообщения «Включён» и «Выключён» с интервалом в полсекунды между ними (используйте delay(500)).

Вопросы для размышления:
1. Почему для этой задачи удобен цикл for?
2. Что произойдёт, если увеличить количество миганий до 6?
3. Как добавить в программу реальное управление встроенным светодиодом L1?

Задача №3. Симуляция показаний датчика

Введение
Вы программируете умный дом на Рудироне, где датчик температуры отправляет данные каждые 2 секунды. Чтобы протестировать систему, нужно сымитировать его работу, генерируя случайные значения от 20 до 30 °C.

Задание
Напишите программу, которая использует цикл for для генерации и вывода 5 случайных значений температуры. Используйте функцию random(20, 31). Между выводами должна быть пауза в 2 секунды (delay(2000)). Не забудьте инициализировать генератор случайных чисел с помощью randomSeed(analogRead(A0)).

Вопросы для размышления:
1. Почему важно использовать randomSeed() для симуляции?
2. Что произойдёт, если изменить интервал вывода на 1 секунду?
3. Как расширить диапазон генерируемых температур, например, до 15–35 °C?

Задача №4. Обратный отсчёт

Введение
Вы готовите робота на Рудироне к старту миссии, и нужно запрограммировать обратный отсчёт от 5 до 1. Программа должна выводить каждую секунду новое значение счётчика в монитор порта.

Задание
Напишите программу, которая использует цикл for для обратного отсчёта от 5 до 1. В каждой итерации цикла выводите текущее значение счётчика и делайте паузу в 1 секунду (delay(1000)).

Вопросы для размышления:
1. Чем цикл for для обратного отсчёта отличается от прямого?
2. Что произойдёт, если начать отсчёт с 10 вместо 5?
3. Как добавить сообщение «Старт!» после завершения отсчёта?

Задача №5. Проверка состояния датчиков

Введение
Ваша система умного дома на Рудироне контролирует 3 датчика. Нужно циклически проверять их состояние, случайно присваивая каждому статус «ОК» или «Ошибка», и выводить результаты в монитор порта.

Задание
Напишите программу, которая использует цикл for для проверки 3 датчиков (с номерами от 1 до 3). Для каждого датчика сгенерируйте случайное состояние (0 или 1) с помощью random(0, 2) и выведите в монитор порта сообщение «Датчик N: ОК» (если 0) или «Датчик N: Ошибка» (если 1).

Вопросы для размышления:
1. Как random() помогает симулировать состояние датчиков?
2. Что произойдёт, если увеличить количество датчиков до 5?
3. Как изменить программу, чтобы она выводила сообщения только о датчиках с ошибками?


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