Arduino

технологии

Управляющие операторы

if

Конструкция if проверяет, верно ли некоторое условие и если оно верно, то она выполняет определенный код. Существует два основных вида использования этого оператора - со скобками и без.

if (условие) {
  код;
}

if (условие)
  код;

При втором варианте выполнится лишь одна следующая за оператором строчка кода. Первый вариант более предпочтителен, так как при его использовании сложнее допустить ошибку.

В качестве условия может быть константа, переменная, вызов функции или выражение:

if (true) {
  // код будет выполнен всегда
}

if (result) {
  // код будет выполнен в случае, если переменная result содержит true
}

if (checkResult()) {
  // код будет выполнен в случае, если функция checkResult() вернет true
}

if (resultCount > 10) {
  // код будет выполнен в случае, если значение переменной resultCount больше 10
}

Если переменная, функция или условие имеют отличный от bool тип, их значения будут преобразованы к типу bool в соответствии с правилами преобразования типов.

Оператор if имеет также расширенный вид if..else, который также может использоваться со скобками и без:

if (условие) {
  код;
} else {
  код;
}

if (условие)
  код;
else
  код;

В случае, если условие вернет true, будет выполнен код, следующий после if, а в случае, если вернет значение false, будет выполнен код после else.

И последний вид оператора такой:

if (условие1) {
  код1;
} else if (условие2) {
  код2;
} else if (условие3) {
  код3;
} else {
  код4;
}

В случае выполнения первого условия будет выполнен лишь код1 и далее условия проверяться не будут. В случае невыполнения первого условия будет проверено второе условие и в случае его выполнения выполнен только код2. В случае не выполнения первого и второго условий будет проверено третье условие и если оно верно, будет выполнен только код3. И наконец в случае невыполнения всех трех условий будет выполнен код4.

switch case

Данная конструкция управляет процессом выполнения программы, позволяя выполнять разный код в зависимости от значения переменной/выражения/функции.

switch(variable) {
  case 1:
    код1;
    break;
  case 10:
    код2;
    break;
  case 15:
    код3;
    break;
  default:
    код4;
    break;
}

В данном примере в зависимости от значения переменной variable будет выполнен разный код: если ее значение равно 1, то будет выполнен код1, если 10 - то код2, если 15 - то код3, а если любое другое значение - код4.

Ключевое слово break позволяет после выполнения соответствующего кода сразу выйти из всей конструкции switch.

for

Кроме потребности выполнять разный код при разных условиях, часто бывает нужно выполнить код несколько раз подряд. Для этого используются операторы цикла, for - один из них.

for (инициализация; условие; выражение) {
  // повторяющийся код
}

В круглых скобках после ключевого слова for идет 3 выражения, разделенных точкой с запятой, а после в фигурных скобках - код, который требуется повторить.

Первое выражение - это инициализация переменной, являющейся счетчиком цикла. Выполняется оно только 1 раз и в нем переменной присваивается начальное значение.

Второе выражение - это условие. Пока это условие возвращает true, код в фигурных скобках будет повторяться. Истинность условия проверяется перед каждом проходе цикла и как только оно становится ложным, цикл прерывается.

Третье выражение - это блок для изменения значение переменной (счетчика) цикла. Вызывается каждый раз после выполнения повторяющегося кода.

Пример: нужно 10 раз моргнуть светодиодом:

for (int i = 0; i < 10; i++) {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

Здесь переменная счетчика - i, которая инициализируется значением ноль, после чего ее значение увеличивается. Повторяющийся код будет выполняться до тех пор, пока значение счетчика меньше 10.

while

Для повторения одного и того же кода иногда бывает неудобно использовать оператор цикла for. Например, когда не нужен счетчик. Для этого есть еще один оператор цикла - while.

while (условие) {
  // повторяющийся код
}

Код в фигурных скобках будет выполняться до тех пор, пока переменная/функция/выражение в круглых скобках возвращает истину.

Допустим, нам нужно, чтобы машинка ехала вперед до тех пор, пока датчик не зафиксирует впереди препятствие:

while (sensorNotDetectWall()) {
  move();
}

Тут функция sensorNotDetectWall() возвращает true в случае, если впереди нет стены, а функция move() включает двигатель машинки на определенное количество секунд.