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.

Полезные материалы