Управляющие конструкции
if (условие) и ==, !=, <, > (операторы сравнения)
if используется в комбинации с операторами сравнения для проверки истинности условий. Например, превышает ли входное значение заданное число. Формат оператора if следующий:
1 2 3 4 |
if (variableN > 50) { // выполнить действия, если условие истинно } |
Этот код сравнивает значение variableN и число 50 - если текущее значение переменной действительно больше 50, выполняются определенные действия. Иначе говоря, если выражение в круглых скобках истинно, выполняются операторы внутри фигурных скобок. В противном случае, фрагмент в фигурных скобках будет пропущен.
Сами фигурные скобки лишь логически группируют несколько строк в один блок и могут отсутствовать. В этом случае только следующая за оператором if строка (до точки с запятой) становится оператором, выполняемым (или не выполняемым) по условию if.
1 2 3 4 5 6 7 8 9 10 11 |
if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120){ digitalWrite(LEDpin, HIGH); } if (x > 120){ digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); } // различные способы записи условного оператора |
Выражения, которые вычисляются внутри круглых скобок, могут состоять из одного или нескольких операторов:
Операторы сравнения
x == y (x равно y)
x != y (x не равно y)
x < y (x меньше y)
x > y (x больше y)
x <= y (x меньше или равно y)
x >= y (x больше или равно y)
Предупреждение
Отличайте знак простого равенства '=' от оператора сравнения '=='. Использование знака равенства в операторе if может дать совершенно другой результат - например, if (y = 40) совершенно не тоже самое, что if (y==40). Знак равенства – это оператор присваивания, который устанавливает значение переменной х равным 40 (заносит значение 40 в переменную y, а не проверяет ее значение на равенство 40!). Старайтесь не забывать всегда использовать в операторе if знак двойного равенства, который является оператором сравнения и проверяет в данном случае х на равенство 10. Выражение (y=10) всегда истинно, в то время как (y==10) истинно только при условии равенства значения переменной десяти.
if/else
Конструкция if..else предоставляет больший контроль над выполнением скетча, чем простой оператор if, позволяя определить в одном месте действия не только для случая, когда выражение в скобках истинно, но и для противоположного (когда значение выражения ложно). В примере ниже, после сравнения переменной и числа 500 аналогового входа набор Действий ОДИН выполнится, если переменная меньше, а набор Действий ДВА - если она больше или равна 500:
1 2 3 4 5 6 7 8 |
if (pinSomeone < 500) { // набор действий ОДИН } else { // набор действий ДВА } |
за else может следовать еще один if, и таким образом можно создать цепочку последовательных взаимоисключающих проверок. В этом случае проверки будут выполняться одна за другой до тех пор, пока не встретится выражение со значением ИСТИНА. После этого будет выполнен следующий за ним блок кода, а проверка остальных условий будет пропущена - вплоть до завершения текущей конструкции if/else. Если не вычислено ни одного истинного выражения, исполняется самый последний блок else по умолчанию (если он существует).
Отметим, что конструкция else if может быть использована с или без заключительного else, и наоборот. Допускается неограниченное число таких переходов else if.
1 2 3 4 5 6 7 8 9 10 11 12 |
if (pinFiveInput < 500) { // действие А } else if (pinFiveInput >= 1000) { // действие Б } else { // действие В } |
switch / case
Подобно оператору if, switch...case управляет ходом выполнения программы, позволяя исполнять разные операторы, в зависимости от текущих условий. Выражение, указанное в строке switch, последовательно сравнивается со значениями в строках case. Если значения совпадают, начинают выполняться следующие за этим case операторы.
Ключевое слово break завершает это выполнение, и обычно используется в конце каждого блока case. Если его опустить, выполнение будет продолжаться через все последующие блоки case до тех пор, пока где-нибудь не встретится break или не закончится сам оператор switch.
Пример
1 2 3 4 5 6 7 8 9 10 11 |
witch (var) { case 1: // сделать что-нибудь, если значение var равно 1 break; case 2: // сделать что-нибудь, если значение var равно 2 break; default: // если ничего не совпало, выполняется default // default можно опускать } |
Синтаксис
1 2 3 4 5 6 7 8 9 10 |
switch (var) { case label: // операторы для выполнения break; case label: // операторы для выполнения break; default: // операторы для выполнения } |
Параметры
var: переменная, чье значение будет сравниваться
label: конкретное значение для сравнения
Оператор for
Описание
Оператор for обычно используется для многократного повторения блока операторов, заключенных в фигурные скобки. Для управления повторениями и выходом из цикла обычно используется переменная-инкрементальный счетчик. For пригоден для любой повторяющейся операции - например, при работе с массивами или инициализации группы универсальных пинов.
В круглых скобках после ключевого слова for указываются три секции:
1 2 3 |
for (инициализация; условие; инкремент) { //оператор(ы); } |
Сначала выполняется Инициализация, причем только один раз. Затем проверяется условие; если оно истинно, выполняется блок операторов в фигурных скобках, затем - выполняется секция инкремента. После этого снова проверяется условие - и так далее, пока условие не станет ложно - в этом случае цикл завершится. Обратите внимание, что если после инициализации условие ложно, то операторы в фигурных скобках не будут выполнены ни одного раза.
Инкремент ++ – это увеличение на единицу. Декремент -- – это уменьшение на единицу. Операции декремента и инкремента с лёгкостью заменяются арифметическими операциями или операциями присваивания.
Пример
1 2 3 |
// выключение пинов со 2-го по 7-ой for (int x = 2; x < 8; x++) { digitalWrite(x, LOW);} |
while
Описание
Цикл while будет непрерывно выполняться до тех пор, пока выражение в круглых скобках не станет false (ложно). Переменная, участвующая в выражении, должна меняться где-то в цикле, иначе он никогда не завершится. Это может быть, например, инкрементируемая переменная-счетчик или значение, прочитанное из датчика.
Синтаксис
1 2 3 |
while(выражение){ // оператор(ы) } |
Пример
1 2 3 4 5 6 7 |
int p = 0; while(p < 100){ // набор действий которые будут выполняться пока p<100 //в качестве операции внутри тела цикла переменная p может быть изменена // например: p=p+23-(p*0.2) } |
do - while
Описание
Цикл do-while работает почти так же, как и while, за исключением того, что условие проверяется в конце цикла, и таким образом он выполняется хотя бы один раз.
Синтаксис
1 2 3 |
do{ // набор действий (оператор или несколько операторов) } while(усолвие); |
break
Описание
break используется для выхода из всех циклов (for, while, do...while). Цикл сразу завершается, без проверки условий. Также применяется для выхода из оператора switch.
Пример
1 2 3 4 5 6 7 |
for (int i=P1;i<K;i++) { if (i==K-1&&nomer[i]>0){ P2=i+1;break;} if (nomer[i]==0){ P2=i;break; } |
continue
Описание
Оператор continue пропускает оставшиеся операторы до завершения цикла (for, while, do...while) и переходит к проверке условия и началу новой итерации (если значение условия подразумевает продолжение цикла).
Пример
1 2 3 4 5 6 7 8 |
for (i = 0; i < 55; i++) { if (i < 20){ continue; } digitalWrite(9, i); delay(10); } |