3.03. Структуры ветвления.md


Теперь, когда вы умеете работать с переменными и операторами, пора научить вашу плату Рудирон принимать решения! До сих пор наши программы были линейными, как прямой коридор. В этом параграфе мы познакомимся со структурами ветвления - инструментами C++, которые создают в этом коридоре «развилки» и «двери», позволяя программе выбирать, по какому пути идти в зависимости от ситуации.

Представьте, что вы создаёте умный дом, если в комнате жарко, включается вентилятор, иначе он выключен. Или программируете робота - в случае, если нажата кнопка «1», он едет вперёд, а в случае кнопки «2» - поворачивает. Структуры ветвления, такие как if и switch, помогают реализовать именно такие сценарии.

Последовательность команд

Прежде чем создавать «развилки», давайте вспомним, как программа движется по «прямому коридору». Код в C++ - это список команд, которые микроконтроллер выполняет строго одну за другой, сверху вниз. Это называется последовательным выполнением.

Важная деталь в C++ - точка с запятой (;). Она ставится в конце каждой команды и работает как точка в предложении - показывает, где одна инструкция заканчивается и начинается другая. Без неё компилятор не поймёт, где заканчиваются ваши мысли, и выдаст ошибку.

Пример:

int ledPin = 5;               // 1. Объявить переменную
pinMode(ledPin, OUTPUT);      // 2. Настроить пин
digitalWrite(ledPin, HIGH);   // 3. Включить светодиод

В этом коде Рудирон выполнит три команды строго по порядку.

Рис. 1. Последовательность команд

Структура «если… то… иначе» (if-else)

Это самая главная и часто используемая «развилка» в программировании. Структура if (если) проверяет, истинно ли какое-то условие, и выполняет блок кода, только если это так. Её можно дополнить блоком else (иначе), который выполнится, если условие было ложным.

Синтаксис if:

if (условие) {
  // Этот код выполнится, только если условие истинно
}

Синтаксис if-else:

if (условие) {
  // Код, если условие истинно
} else {
  // Код, если условие ложно
}
  • условие - это любое выражение, результатом которого является true или false. Здесь мы используем операторы сравнения (>, <, ==) и логические операторы (&&, ||), которые изучили в прошлом параграфе.

Пример:

int temperature = 25;

if (temperature > 30) {
  Serial.println("Слишком жарко! Включаем кондиционер.");
} else {
  Serial.println("Температура комфортная.");
}

В этом коде Рудирон проверяет переменную temperature. Так как 25 > 30 - это false, выполнится блок else.

Рис. 2. Структура if-else

Структура «переключатель» (switch)

Когда вам нужно выбрать одно действие из множества возможных вариантов, использовать длинную цепочку if-else if-else может быть неудобно. Для таких случаев в C++ есть более изящная структура - switch (переключатель).

switch работает как меню в ресторане: вы смотрите на переменную (блюдо, которое заказали) и выбираете соответствующее действие (case). Если ничего подходящего не нашлось, выполняется действие по умолчанию (default).

Синтаксис switch:

switch (переменная) {
  case значение1:
    // Код для случая, когда переменная == значение1
    break;
  case значение2:
    // Код для случая, когда переменная == значение2
    break;
  default:
    // Код, если ни один case не подошёл
}
  • переменная - целочисленная переменная (int, char, byte), которую мы проверяем.
  • case - один из возможных вариантов значения переменной.
  • break - очень важная команда! Она говорит: «Действие для этого случая выполнено, выходим из switch». Если забыть break, программа «провалится» и начнёт выполнять код следующего case!
  • default - необязательный блок, который выполняется, если значение переменной не совпало ни с одним из case.

Пример:

int mode = 2; // Режим работы робота

switch (mode) {
  case 1:
    Serial.println("Робот движется вперёд.");
    break;
  case 2:
    Serial.println("Робот поворачивает.");
    break;
  case 3:
    Serial.println("Робот остановлен.");
    break;
  default:
    Serial.println("Неизвестный режим.");
}

В этом примере mode равно 2, поэтому выполнится второй case, и в монитор порта выведется «Робот поворачивает.».

Рис. 3. Структура switch

Зачем это нужно?

Структуры ветвления - это то, что делает программы «умными». Они позволяют вашему Рудирону анализировать данные с датчиков или кнопок и реагировать на них по-разному. С помощью if-else вы можете создать систему климат-контроля, а с помощью switch - реализовать меню на дисплее или управлять режимами работы робота.


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