while
Цикл while повторяет блок кода, пока условие остаётся true — важно, чтобы внутри цикла что-то меняло это условие, иначе программа зависнет.
Полная статья
Описание
Цикл while повторяет блок кода снова и снова, пока условие в скобках остаётся истинным. Как только условие становится ложным, выполнение продолжается со следующей строки после цикла.
Главное, что нужно помнить: внутри цикла (или снаружи — через датчик, флаг, прерывание) что-то обязательно должно влиять на проверяемое условие. Если этого не происходит, цикл будет крутиться вечно и заблокирует всю остальную программу. Иногда это сделано намеренно, но чаще — это ошибка.
Синтаксис
while (condition) {
// оператор(ы)
}
Параметры
condition: логическое выражение, результат которого равен true или false. Пока выражение равно true, тело цикла выполняется. Как только оно становится false, цикл завершается.
Пример кода
var = 0;
while (var < 200) {
// повторить действие 200 раз
var++;
}
Где применяется
- Ожидание события — держать программу на паузе, пока кнопка не нажата или датчик не вернул нужное значение.
- Счётные циклы — повторить действие заданное количество раз, увеличивая счётчик внутри тела цикла.
- Чтение данных — обрабатывать входящие байты из
Serialили другого интерфейса, пока данные есть в буфере. - Анимация и паттерны — крутить световой эффект, пока не истечёт заданный промежуток времени.
Практические замечания
- Если условие изначально ложно, тело цикла не выполнится ни разу — это нормальное поведение, не баг.
- Бесконечный цикл
while (true) { ... }используется намеренно, когда нужно выполнять действие постоянно — аналогloop(), но внутри функции. - Если внутри цикла нет изменения переменной-условия, Arduino зависнет: никакие другие части скетча не будут работать.
- При работе с датчиками убедитесь, что опрашиваемое значение действительно может измениться — иначе цикл станет ловушкой.
- Для отладки зависшего цикла добавьте вывод в
Serial.println()внутри тела — так сразу видно, выходит ли программа из цикла вообще.