Arduino:Справочник языка Arduino/Управляющие операторы/for

Материал из Онлайн справочника
Перейти к: навигация, поиск

{{#setlogo:ArduinoCommunityLogo.png}}

Проверка/Оформление/Редактирование: Мякишев Е.А.


Оператор For

Конструкция for используется для повторения блока операторов, заключенных в фигурные скобки. Счетчик приращений обычно используется для приращения и завершения цикла. Оператор for подходит для любых повторяющихся действий и часто используется в сочетании с массивами коллекций данных/выводов.

Заголовок цикла for состоит из трех частей:

  1. for (initialization; condition; increment)
  2. {
  3. // операторы выполняющиеся в цикле
  4. }

Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.

Пример

  1. // Затемнение светодиода с использованием ШИМ-вывода
  2. int PWMpin = 10; // Светодиод последовательно с резистором 470 ом на 10 выводов
  3. void setup()
  4. {
  5.  // настройка не нужна
  6. }
  7. void loop()
  8. {
  9.    for (int i=0; i <= 255; i++){
  10.       analogWrite(PWMpin, i);
  11.       delay(10);
  12.    }
  13. }

Советы по применению

Цикл for в Си гораздо более гибкий, чем циклы for в других языках программирования, например, в Бейсике. Любой из трех или все три элемента заголовка могут быть опущены, хотя точки с запятой обязательны. Также операторы для инициализации, условия и приращения цикла могут быть любым допустимым в Си операторами с независимыми переменными, и использовать любой тип данных Си, включая данные с плавающей точкой (floats). Эти необычные для цикла for типы операторов позволяют обеспечить программное решение некоторых нестандартных проблем.

Например, использование умножения в операторе счетчика цикла позволяет создавать логарифмическую прогрессию:

  1. for(int x = 2; x < 100; x = x * 1.5){
  2.     println(x);
  3. }

Генерируется: 2,3,4,6,9,13,19,28,42,63,94

Другой пример, плавное уменьшение или увеличение уровня сигнала на светодиод с помощью одного цикла for:

  1. void loop()
  2. {
  3.   int x = 1;
  4.   for (int i = 0; i > -1; i = i + x){
  5.       analogWrite(PWMpin, i);
  6.       if (i == 255) x = -1;             // переключение управления на максимуме
  7.       delay(10);
  8.    }
  9. }

См.также

Внешние ссылки