Найти в Дзене

🤖 Все виды условий в Arduino — простым языком

Или как выбрать правильно if — как строгая мама: если условия не совпали, ничего не будет.
Пример: if (temperature > 30) {
digitalWrite(fanPin, HIGH); // Включить вентилятор
} Если температура выше 30, включаем вентилятор. Не выше — сиди, потей! else — запасной план. Если первое условие не сработало, делаем что-то другое. if (digitalRead(buttonPin) == HIGH) {
digitalWrite(ledPin, HIGH); // Зажечь LED
} else {
digitalWrite(ledPin, LOW); // Потушить LED
} Если кнопку нажали — свет горит, нет — тьма. Все честно! Для случая, когда условий много, а жизнь одна. if (value > 100) {
Serial.println("Большое значение!");
} else if (value > 50) {
Serial.println("Среднее значение!");
} else {
Serial.println("Маловато будет…");
} Проверяем по очереди: сначала самое важное, потом что попроще, а если вообще никуда — выводим “маловато будет”. Когда условий много, а хочется красиво и компактно.
Классика для кнопок, меню, режимов работы. switch (command) {
case 1:
digitalWrite(ledPin,
Оглавление

Или как выбрать правильно

Выбор - это сложно
Выбор - это сложно

1. if — “А ну-ка, проверь!”

if — как строгая мама: если условия не совпали, ничего не будет.

Пример:

if (temperature > 30) {
digitalWrite(fanPin, HIGH); // Включить вентилятор
}

Если температура выше 30, включаем вентилятор. Не выше — сиди, потей!

2. if…else — “А если нет?”

else — запасной план. Если первое условие не сработало, делаем что-то другое.

if (digitalRead(buttonPin) == HIGH) {
digitalWrite(ledPin, HIGH); // Зажечь LED
} else {
digitalWrite(ledPin, LOW); // Потушить LED
}

Если кнопку нажали — свет горит, нет — тьма. Все честно!

3. else if — “Ну хорошо, а если так?”

Для случая, когда условий много, а жизнь одна.

if (value > 100) {
Serial.println("Большое значение!");
} else if (value > 50) {
Serial.println("Среднее значение!");
} else {
Serial.println("Маловато будет…");
}

Проверяем по очереди: сначала самое важное, потом что попроще, а если вообще никуда — выводим “маловато будет”.

4. switch…case — “Пульт управления”

Когда условий много, а хочется красиво и компактно.

Классика для кнопок, меню, режимов работы.

switch (command) {
case 1:
digitalWrite(ledPin, HIGH); // Включить LED
break;
case 2:
digitalWrite(ledPin, LOW); // Выключить LED
break;
default:
Serial.println("Неизвестная команда!");
}

Один переключатель — куча вариантов. Очень удобно для меню.

Не все знают, но в Arduino (а точнее, в компиляторе avr-gcc, который стоит под капотом IDE) можно использовать не только отдельные значения, но и целые диапазоны в switch-case. На чистом C/C++ так не выйдет — а вот в Arduino можно!

🎯 Как это работает

Классический синтаксис с диапазоном выглядит так:

switch (value) {
case 1 ... 5:
// Выполнится, если value равно 1, 2, 3, 4 или 5
Serial.println("Значение от 1 до 5!");
break;
case 10 ... 20:
Serial.println("value от 10 до 20!");
break;
case 'A' ... 'Z':
Serial.println("Это большая латинская буква");
break;
default:
Serial.println("Что-то совсем другое");
}
  • Три точки с пробелами: case 1 ... 5:
  • Поддерживаются любые константные целые типы (int, byte, char, даже символы)
  • Для строк (String, char*) — не работает. Только числа и символы!

🅰️ Диапазоны символов в switch…case: работает ли 'A' ... 'Z'?

Сюрприз для всех, кто любит компактный и читабельный код:

В Arduino (на платах типа Uno, Nano, Mega и т.д., где используется компилятор
avr-gcc) реально работает запись:

switch (ch) {
case 'A' ... 'Z':
Serial.println("Введена большая латинская буква!");
break;
case 'a' ... 'z':
Serial.println("Введена маленькая латинская буква!");
break;
default:
Serial.println("Это не латинская буква.");
}
  • Используйте пробелы вокруг трёх точек: case 'A' ... 'Z':
  • Работает для любых константных целых значений или символов (например, '0' ... '9', 'A' ... 'Z', 'а' ... 'я' — если нужна кириллица, по ASCII-коду!)
  • Не работает для строк и переменных границ диапазона.

🔎 Зачем это удобно?

  • Ваша обработка символов становится простой и быстрой — не нужно писать десятки case подряд.
  • Читабельность повышается, код не превращается в “портянку”.

5. Тернарный оператор — “Коротко и ясно”

Пишем условие в одну строку. Подходит для простых решений (когда лень писать много).

digitalWrite(ledPin, (sensorValue > 500) ? HIGH : LOW);

Если значение датчика больше 500 — светим. Нет — тушим.

6. Логические операторы — “И, или, не”

  • && — и (оба условия должны быть правдой)
  • || — или (достаточно одного)
  • ! — не (инвертирует)

Пример:

if (isRaining && isCold) {
Serial.println("Одевайтесь теплее!");
}
if (isWeekend || isHoliday) {
Serial.println("Можно поспать!");
}
if (!isDoorClosed) {
Serial.println("Закройте дверь!");
}

7. Вложенные условия — “Шахматная партия”

Можно вкладывать одно условие в другое — так делается логика посложнее.

if (userLoggedIn) {
if (userIsAdmin) {
Serial.println("Добро пожаловать, админ!");
} else {
Serial.println("Привет, пользователь!");
}
}

🛠️ Практика: Реальный проект “Умный дом”

Допустим, у нас система “Умный дом” с кнопкой, датчиком и светодиодом:

void loop() {
int temp = analogRead(tempPin);
int buttonState = digitalRead(buttonPin);

if (buttonState == HIGH && temp > 25) {
digitalWrite(ledPin, HIGH); // Готовим сауну!
} else if (buttonState == HIGH && temp <= 25) {
digitalWrite(ledPin, LOW); // Хватит жары
} else {
// Никто не трогает кнопку — экономим энергию
digitalWrite(ledPin, LOW);
}
}

🧩 Итоги

Условия — это ваши рычаги управления любым “умным” устройством.

Поняли их — сможете создать хоть кофеварку, хоть сигнализацию, хоть автоматическую кормушку для кота (чтобы ваш кот наконец перестал шантажировать вас в 5 утра).