Условные операторы if … else в Arduino IDE создают удобную конструкцию в скетче, которая разветвляет выполнение программы в зависимости от значения переменной или исходя из каких-то данных, полученных, например, от датчиков и сенсоров, подключенных к микроконтроллеру Ардуино. Рассмотрим в этой статье примеры использования конструкции if else в Ардуино, а также логические операторы сравнения (== != < >).
СОДЕРЖАНИЕ ►
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- датчик воды (water sensor)
- светодиод и резистор
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Условный оператор if (если) в языке Arduino проверяет условие и если оно истинно, выполняется блок команд. Существует два вида использования оператора if в скетче — с фигурными скобками и без. Без фигурных скобок после условного оператора if, будет выполнена только первая команда. Мы рекомендуем всегда использовать фигурные скобки, так как в этом случае сложнее допустить ошибку в программе.
Условные операторы if, if…else в Arduino

Рассмотрим применение блоков условий на примере подключения датчика воды и светодиодов (можно использовать любой сенсор). В языке Arduino if используется с логическими операторами для проверки истинности условий. Круглые скобки логически группируют несколько операторов сравнений в один блок. Следующая программа проверяет, превышает ли значение переменной water заданный интервал.
Пример скетча с условным оператором if
#define LED 13
#define WTR A1
int water;
void setup() {
pinMode(LED, OUTPUT);
pinMode(WTR, INPUT);
Serial.begin(9600);
}
void loop() {
water = analogRead(WTR);
Serial.println(water);
if (water > 100) { digitalWrite(LED, HIGH); }
if (water < 100) { digitalWrite(LED, LOW); }
delay(1000);
}
В этом скетче переменная water сравнивается со значением 100 и если переменная больше этого значения, то включается светодиод. Конструкция if else Arduino обеспечивает больший контроль над программой, чем один оператор if. Это позволяет определить действия не только для случая, когда выражение истинно, но и когда значение ложно. Загрузите пример программы с операторами if … else в языке Ардуино.
Скетч с условным оператором else
#define LED 13
#define WTR A1
int water;
void setup() {
pinMode(LED, OUTPUT);
pinMode(WTR, INPUT);
Serial.begin(9600);
}
void loop() {
water = analogRead(WTR);
Serial.println(water);
if (water > 100) { digitalWrite(LED, HIGH); }
else { digitalWrite(LED, LOW); }
delay(1000);
}
Логические операторы, операторы сравнения
Не путайте знак равенства «=» с оператором сравнения Arduino «==». Использование знака равенства в условном операторе if может дать другой результат при выполнении программы. Например, фрагмент кода if (y = 100) — это не то же самое, что if (y==100). Знак равенства — это оператор присваивания, который устанавливает значение переменной y равным 100 и не проверяет, равна ли переменная y значению 100.
Операторы сравнения Arduino
x == y (x равен y)
x != y (x не равно y)
x < y (x меньше y)
x > y (x больше y)
x <= y (x меньше или равно y)
x >= y (x больше или равно y)
Логические операторы Arduino
! (not) логическое НЕ, отрицание
&& (and) логическое И
|| (or) логическое ИЛИ
В следующем примере с помощью логического оператора and (&&) мы объединили два условия в одном блоке. Сейчас светодиод будет гореть, когда переменная water будет больше 100 значения и меньше 200, в других остальных случаях светодиод будет выключен. Количество использования логических операторов в одном блоке не ограничено. Загрузите следующий код в плату, схема с датчиком остается прежней.
Скетч с логическим оператором
#define LED 13
#define WTR 10
int water;
void setup() {
pinMode(LED, OUTPUT);
pinMode(WTR, INPUT);
Serial.begin(9600);
}
void loop() {
water = analogRead(WTR);
Serial.println(water);
if (water > 100 and water < 200) { digitalWrite(LED, HIGH); }
else { digitalWrite(LED, LOW); }
delay(1000);
}
Несколько условий if … else в Arduino

В программе может быть несколько условий if, создавая целую цепочку элементов управления. Проверки будут выполняться одна за другой, пока не будет встречено истинное выражение. Если истинное выражение не найдено, будет выполнен последний блок else (если он есть в программе). Конструкция else if может быть без заключительного блока else и наоборот. Количество ветвей else if в программе не ограничено.
#define LED 13
#define WTR A1
int water;
void setup() {
pinMode(13, OUTPUT);
pinMode(A1, INPUT);
Serial.begin(9600);
}
void loop() {
water = analogRead(WTR);
Serial.println(water);
if (water < 100 or water > 400) { digitalWrite(LED, LOW); }
else if (water > 100 and water < 200) { digitalWrite(LED, HIGH); }
else if (water > 200 and water < 300) { digitalWrite(LED, LOW); }
else if (water > 300 and water < 400) { digitalWrite(LED, HIGH); }
delay(1000);
}
Заключение. Порядок условий в одном блоке играет важную роль, когда речь идет об оптимизации кода и попытке сделать программу быстрее. Суть заключается в том, что логические выражения проверяются слева направо, и если первая проверка делает выражение недействительным, дальнейшая проверка прекращается. Таким образом можно освободить микроконтроллер Ардуино от выполнения лишних проверок.
