for
Цикл for повторяет блок кода заданное число раз, управляя счётчиком через initialization, condition и increment.
Полная статья
Описание
for — один из самых распространённых способов организовать повторяющиеся действия в Arduino-скетче. Вы задаёте начальное значение счётчика, условие продолжения и шаг изменения — и цикл сам следит за тем, когда остановиться. for особенно удобен там, где нужно перебрать все элементы массива, пройтись по набору пинов или плавно изменить какое-то значение от одного предела до другого.
Синтаксис
for (initialization; condition; increment) {
// оператор(ы);
}
Параметры
initialization— выполняется один раз перед первой итерацией. Здесь обычно объявляют и инициализируют счётчик, напримерint i = 0.condition— проверяется перед каждой итерацией. Покаconditionвозвращаетtrue, цикл продолжается: выполняется тело, затемcondition, и снова проверяетсяcondition. Как толькоconditionстановитсяfalse, цикл завершается.increment— выполняется в конце каждой итерации, когдаconditionравноtrue. Чаще всего здесь увеличивают или уменьшают счётчик:i++,i--,i += 2.
Пример кода
// Плавное увеличение яркости светодиода через PWM пин
int PWMpin = 10; // Светодиод последовательно с резистором 470 Ом от пина 10 к GND
void setup() {
// настройка не требуется
}
void loop() {
for (int i = 0; i <= 255; i++) {
analogWrite(PWMpin, i);
delay(10);
}
}
Примечания и предупреждения
Цикл for в C++ значительно гибче, чем аналоги в ряде других языков. Любую из трёх частей заголовка можно опустить — точки с запятой при этом остаются обязательными. Инициализация, условие и шаг могут содержать произвольные выражения C++: работать с несколькими переменными, использовать числа с плавающей точкой или нелинейные операции.
Например, если в части increment использовать умножение, счётчик будет расти по логарифмической прогрессии:
for (int x = 2; x < 100; x = x * 1.5) {
println(x);
}
Генерирует: 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94
Другой пример — плавное нарастание и угасание яркости светодиода в одном for цикле:
void loop() {
int x = 1;
for (int i = 0; i > -1; i = i + x) {
analogWrite(PWMpin, i);
if (i == 255) {
x = -1; // смена направления на пике
}
delay(10);
}
}
Где применяется
- Перебор пинов — когда несколько светодиодов или кнопок подключены к последовательным пинам, цикл
forпозволяет настроить их все в одном месте. - Работа с массивами — чтение или запись каждого элемента: показания датчиков, таблицы значений, буферы.
- Плавное изменение параметра — нарастание яркости через
analogWrite, разгон/торможение мотора, изменение частоты звука. - Задержки с обратным отсчётом — когда нужно выполнить действие ровно N раз с паузой между итерациями.
Практические замечания
- Если
conditionникогда не станетfalse, цикл будет выполняться бесконечно и заблокирует остальной код. Проверяйте, что счётчик действительно достигает граничного значения. - Переменная-счётчик, объявленная прямо в
initialization(например,int i = 0), существует только внутри цикла — это хорошая практика, которая предотвращает случайное использование её снаружи. - Тип счётчика важен: если вы работаете с большими значениями или отрицательным шагом, убедитесь, что тип (
int,unsigned int,byte) не вызовет переполнения и неожиданного поведенияcondition. - Цикл
forс пустым телом ({}) иногда используют как компактную задержку или ожидание, но для Arduino лучше использоватьdelay()илиmillis()— это понятнее и не вводит в заблуждение. - Если нужно выйти из цикла досрочно, используйте
break; если нужно пропустить текущую итерацию —continue.