Станция уже умеет считывать показание в инженерных единицах. Пора научить её принимать решение по этому показанию — это ядро мехатроники: датчик → условие → сигнал.

После урока сможешь: строить многоступенчатую пороговую логику (if/else if/else), комбинировать условия через && и ||. В конце — «сигнализация порога»: три уровня реакции на показание датчика.
Вспомни: в Python-курсе ты уже собирал «Контроллер порога» — реакцию на показание датчика по условию (занятие 3 первого курса). Логика та же: сравниваем значение с порогом и решаем, что делать. Разница в том, что сейчас показание приходит с настоящего (симулированного) входа, а не из переменной, которую задал сам.
От одного порога к трём уровням: else if
Одного if/else хватает на два исхода. Станции нужно три: норма, предупреждение, авария. Для этого между if и else вставляют else if — «а если не то, то проверь ещё вот это». Проверка идёт по порядку, сверху вниз, и выполняется только ПЕРВАЯ подходящая ветка — остальные пропускаются, даже если тоже подошли бы.
int syroe = analogRead(A0);
int temperatura = map(syroe, 0, 1023, -20, 60);
if (temperatura > 40) {
Serial.println("Авария");
} else if (temperatura > 30) {
Serial.println("Предупреждение");
} else {
Serial.println("Норма");
}
Норма
Лесенка if / else if / else (проверка сверху вниз):
temperatura > 40 ? --да--> "Авария"
| нет
v
temperatura > 30 ? --да--> "Предупреждение"
| нет
v
"Норма"
Выполнится РОВНО ОДНА ветка — первая, что подошла.
Порядок условий важен: если бы первой проверкой стояло
temperatura > 30, то при 45 градусах сработала бы ветка «Предупреждение», а до «Авария» дело бы не дошло. Проверять нужно от самого строгого условия к самому мягкому.
Составные условия: && (И) и || (ИЛИ)
Иногда авария наступает не при одном, а при нескольких условиях сразу. && означает «И» — истинно, только если ОБА условия истинны. || означает «ИЛИ» — истинно, если истинно ХОТЯ БЫ ОДНО условие.
if (temperatura > 40 || temperatura < -10) {
Serial.println("Авария: недопустимая температура");
}
Таблица && и ||: A B A && B A || B истина истина истина истина истина ложь ложь истина ложь истина ложь истина ложь ложь ложь ложь && — оба должны быть истинны. || — достаточно одного.
Миссия: сигнализация порога
Подключи потенциометр к A0 и светодиод к пину 9. Переведи сигнал в диапазон -20..60 (температура). Если температура выше 40 — включи светодиод и выведи «Авария»; если от 30 до 40 — выключи светодиод и выведи «Предупреждение»; иначе — выключи светодиод и выведи «Норма».
void setup() {
pinMode(9, OUTPUT);
Serial.begin(9600);
}
void loop() {
int syroe = analogRead(A0);
int temperatura = map(syroe, 0, 1023, -20, 60);
if (temperatura > 40) {
digitalWrite(9, HIGH);
Serial.println("Авария");
} else if (temperatura > 30) {
digitalWrite(9, LOW);
Serial.println("Предупреждение");
} else {
digitalWrite(9, LOW);
Serial.println("Норма");
}
delay(300);
}
Проверь себя
Контрольный вопрос. Для чего нужен else if между if и else?
Подсказка: else if добавляет промежуточную проверку между «да» и «во всех остальных случаях».
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Сколько ветвей цепочки if/else if/else выполнится за один проход, если условия не пересекаются по смыслу?
Подсказка: Проверка идёт сверху вниз и останавливается на первом подходящем условии.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. temperatura равна 25. Что выведется?
Исходный код для этого задания:
if (temperatura > 40) { Serial.println("Авария"); } else if (temperatura > 30) { Serial.println("Предупреждение"); } else { Serial.println("Норма"); }Подсказка: 25 не больше 40 и не больше 30 — какая ветка остаётся?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. temperatura равна 35. Что выведется?
Исходный код для этого задания:
if (temperatura > 40) { Serial.println("Авария"); } else if (temperatura > 30) { Serial.println("Предупреждение"); } else { Serial.println("Норма"); }Подсказка: 35 не больше 40, но больше 30 — какая ветка подходит?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. temperatura равна 45. Что выведется?
Исходный код для этого задания:
if (temperatura > 40) { Serial.println("Авария"); } else if (temperatura > 30) { Serial.println("Предупреждение"); } else { Serial.println("Норма"); }Подсказка: 45 больше 40 — какая ветка проверяется первой и сразу подходит?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Условие (a > 10 && b < 5) истинно. Что это значит?
Подсказка: && — это «И». Для истинности нужны ОБА условия сразу.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. temperatura равна -15. Сработает ли сигнализация «Авария: недопустимая температура»?
Исходный код для этого задания:
if (temperatura > 40 || temperatura < -10) { Serial.println("Авария: недопустимая температура"); }Подсказка: || требует истинности хотя бы одного условия, а не обоих сразу.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. temperatura равна 45, oboroty равны 600. Сработает ли условие?
Исходный код для этого задания:
if (temperatura > 40 && oboroty < 500) { Serial.println("Авария: перегрев на низких оборотах"); }Подсказка: && требует ИСТИННОСТИ ОБОИХ условий одновременно — проверь каждое по отдельности.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. В этом коде одно и то же показание сравнивается с порогами по всей цепочке else if — та же переменная используется в остальных ветках. Какое имя должно стоять вместо ___ в первой строке (эта ветка обязана стоять ПЕРЕД проверкой «больше 50», иначе она никогда не сработает)?
Исходный код для этого задания:
if (___ > 80) { Serial.println("Критично"); } else if (davlenie > 50) { Serial.println("Повышено"); } else { Serial.println("Норма"); }Подсказка: Посмотри, какая переменная уже стоит в ветке else if чуть ниже — в первой строке должна быть та же самая.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Напиши код сам (if/else if/else, 6 строк). В переменной urovenj — показание (0..100). Если больше 90 — выведи «Перелив»; если больше 70 — выведи «Заполнено»; иначе — выведи «Норма».
Исходный код для этого задания:
int urovenj = map(analogRead(A0), 0, 1023, 0, 100); // напиши if/else if/else по описанию вышеПодсказка: Проверяй от самого строгого порога (90) к самому мягкому, иначе более мягкое условие перехватит проверку раньше.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Станция должна сигналить и «Авария», и «Предупреждение» отдельно, но выводит только одно сообщение за раз, хотя оба условия истинны. В чём причина такого поведения?
Исходный код для этого задания:
if (temperatura > 40) { Serial.println("Авария"); } else if (temperatura > 30) { Serial.println("Предупреждение"); }Подсказка: Вспомни правило из блока «От одного порога к трём уровням»: else if выполняет ровно одну ветку.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. temperatura равна 32, oboroty равны 300. Что выведет программа?
Исходный код для этого задания:
if (temperatura > 40 && oboroty > 1000) { Serial.println("Авария"); } else if (temperatura > 30 || oboroty < 400) { Serial.println("Предупреждение"); } else { Serial.println("Норма"); }Подсказка: Сначала проверь первое условие целиком (оба ли верны для &&), потом второе (достаточно одного для ||).
Онлайн-проверка ответа появится позже
Задание. Напиши программу целиком (около 12 строк). Пин 9 — светодиод (выход). Считай A0, переведи в диапазон -20..60 (temperatura). Три уровня: выше 40 ИЛИ ниже -10 — включи светодиод и выведи «Авария»; от 25 до 40 (не включая границы) — выключи светодиод и выведи «Предупреждение»; иначе — выключи светодиод и выведи «Норма». Пауза 300 миллисекунд.
Исходный код для этого задания:
// напиши setup() и loop() целиком по описанию вышеПодсказка: Первая ветка — составное условие с ||; вторая ветка — обычное сравнение (else if уже гарантирует, что температура не выше 40 и не ниже -10, поэтому достаточно проверить нижнюю границу 25).
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Что дальше
Теперь станция принимает решение по показанию — три уровня реакции. Но пока весь код выполняется по очереди с задержками delay(). На следующем занятии научимся вести несколько процессов «одновременно» без блокировки — через millis().
Итог: ты строишь многоступенчатую пороговую логику через if/else if/else и комбинируешь условия через && и ||. Дальше — неблокирующее время: несколько процессов сразу.
