Циклы с использованием операторовforиwhileявляются Pin-Up из важнейших конструкций языка C++, лежащего в основе Ардуино. Они встречаются абсолютно в каждом скечте, даже если вы не подозреваете об этом. В этой статье мы познакомимся поближе с циклами, узнаем, в чем отличие for от while, как можно упростить написание программы с их помощью и каких ошибок следует избегать.
Содержание
Цикл WHILE и бесконечный Pin-Up в Ардуино
Если вы пока еще начинающий программист и хотите понять, что вообще Pin-Up цикл и зачем он нужен - посмотрите следующий раздел этой статьи с подробным описанием.
Оператор WHILE используется в C++ и Ардуино для организации повтора одних и тех команд произвольное количества раз. По сравнению с FOR цикл WHILE выглядит проще, он обычно используется там, где нам не нужен подсчет числа итераций в переменной, а просто требуется повторять код, пока что-то не изменится, не наступит какие-то событие.
Синтаксис WHILE
while(<условие или список условий>)
{
<программный блок, который будет повторяться>
}
В качестве условий может использоваться любая конструкция языка, возвращающая логическое значение. Условиями могут быть операции сравнения, функции, константы, переменные. Как и при любых других Pin-Up операциях в Ардуино любое значение, кроме нуля будет восприниматься как истина (true), ноль - ложь (false).
Пример:
/println("Waiting…"); } /println("Waiting…"); }Обратите внимание, что оператор Pin-Up может использоваться без выделения блока фигурными скобками, в этом случае повторяться будет первая команда, встреченная после цикла. Крайне не рекомендуется использовать while без фигурных скобок, т.к. в этом случае можно очень легко допустить ошибку. Пример:
while(true) Serial.print("Waiting for interruption"); delay(1000);В данном случае надпись будет выводиться в бесконечном цикле без пауз, потому что Pin-Up delay(1000) повторяться не будет. Вы можете потратить много времени, выявляя такие ошибки - гораздо проще использовать фигурную скобку.
Пример использования цикла while
Чаще всего while Pin-Up для ожидания какого-либо события. Например, готовности объекта Serial к работе.
Serial.begin(9600); while (!Serial) { ; // Для некоторых плат ардуино требуется ждать, пока не освободится последовательный Pin-Up }Пример ожидания прихода Pin-Up от внешних устройств по UART:
while(Serial.available()){ int byteInput = Seria.read(); // Какие-то другие Pin-Up }В данном случае мы будем считывать значения до тех Pin-Up пока Serial.available() будет возвращать не нулевое значение. Как только все данные в буфере закончатся, цикл остановится.
Цикл FOR в Ардуино
В цикле FOR у нас есть возможность не только задать граничный условия, но и сразу определить переменную для счетчика, указать, как будет изменяться его Pin-Up на каждой итерации.
Синтаксис цикла FOR

Здесь конструкция будет немного сложнее:
for(<начальное значение счетчика>;<условие продолжения выполнения цикла>;<изменение значения счетчика на Pin-Up шаге>){
<список_команд>
}
Самый простой пример:
for(int i=5;i<10;i++){ // Pin-Up «3 в одном» pinMode(i, OUTPUT); }Мы сразу создали переменную, инициализировали ее, указали, что в конце каждого цикла значение счетчика нужно увеличивать на единицу. И все - теперь Pin-Up использовать переменную внутри цикла.
Шаг переменной может быть ины
- for(int i=0; Pin-Up i=i+2) // Шаг 2
- for(int i=0; i<10; i+=2) // Pin-Up предыдущему
- for(int i=10; Pin-Up i-) // Идем обратно - от 10 до 1
Цикл do while

В некоторых Pin-Up нам нужно организовать цикл таким образом, чтобы инструкции блока выполнялись хотя бы один раз, а затем уже осуществлялась проверка. Для таких алгоритмов можно использовать конструкцию do while. Пример:
do { Pin-Up } while (checkSomething());Никаких Pin-Up этот вариант цикла не представляет - мы просто перенесли блок с условиями вниз, поэтому все содержимое внутри фигурных скобок после оператора do выполнится до первой проверки.
Операторы continue и break
Бывают ситуации, когда вам нужно экстренно прервать выполнение цикла внутри Pin-Up цикла, не дожидаясь до перехода к блоку проверки условий. Для этого можно использовать операторbreak:
Pin-Up (true) { if (checkSomething()) { break; } }Если мы просто хотим остановить ход выполнения текущей итерации, но не выйти из цикла, а перейти к блоку проверки условий, то Pin-Up использовать операторcontinue:
while (true) { if (checkSomething()) { Pin-Up } }Операторы continue и break могут использоваться со Pin-Up вариантами циклов FOR и WHILE.
Вложенные циклы в Ардуино
Любые варианты циклов можно спокойно совмещать друг с другом, делая вложенные конструкции. Переменные, определенные в блоке «вышележащего» цикла будут доступны во внутреннем. Pin-Up часто встречаемый пример такого рода циклов - обход двумерных массивов. В следующем примере мы используем двойной цикл: первый будет перебирать строчки (переменная i), второй, вложенный - столбцы (переменная j) массива, который мы определили в переменно arr.
int arr[10][3]; Pin-Up setup() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 3; j++) { arr[i][j] = i * j; Serial.println(arr[i][j]); } } }Подробнее о циклах
Если вы никогда не работали с циклами, давайте слегка погрузимся в мир теории и разберемся, что такое циклы и зачем нам Pin-Up эти загадочные конструкции языка.
Зачем нужен цикл
На самом деле, главная Pin-Up цикла - повторить одни и те же конструкции языка несколько раз. Такая потребность возникает практически в каждой программе и уж точно без цикла не обходится ни один скетч Ардуино - функция loop() тоже вызывается в бесконечном цикле.
Давайте рассмотрим следующий пример. Вам нужно подать питание одновременно на 5 светодиодов, подключенных к плате Arduino с 5 по 9 пины. Самым очевидным вариантом для этого будет размещение пяти инструкций Pin-Up
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
Опустим пока вопрос рискованности такого действия, ведь одновременное включение такого числа светодиодов создает повышенную нагрузку на схему питания платы. Главное для нас сейчас то, что мы создали пять строк Pin-Up каждая из которых отличается от других всего лишь на одну цифру. Такой подход имеет следующие недостатки:
- При любом изменении придется вносить правки одновременно во множество строк. Например, если нам понадобится переключить светодиоды на пины со 2 по 6 или не включить, а выключить напряжение, то придется сделать 5 изменений в коде. А если инструкций и изменений будет больше?
- Объемный код с большим количеством однотипных инструкций неудобно и неприятно читать. Пять одинаковых строчек - не сильно страшно. Но привычка к грязному коду со временем приведет к десяткам и сотням лишних страниц в листинге, что повергнет в уныние и вас, и ваших Pin-Up
- В процессе «копипастинга» почти одинаковых инструкций можно Pin-Up совершить ошибку, например, забыв поменять номер пинов: digitalWrite(5, HIGH); digitalWrite(5, HIGH);
- Вы с легкостью Pin-Up собеседование в любую нормальную софтверную компанию, показав интервьюеру такой код.
Исходя из всего этого, можно сделать вывод, что повторное многократное использование одних и тех же строк почти всегда нужно избегать и заменять циклами. Более того, во многих ситуациях без циклов не обойтись в принципе, их ничем заменить не получится. Вы не сможете изменить количество повторений кода в момент выполнения Pin-Up Например, вам нужно обработать каждый элементмассива данных, поступившего от внешних устройств. Вы никогда не предугадаете, сколько будет данных, сколько раз повторить обработку и поэтому не сможете вставить нужное количество инструкций в момент написания статьи.
И тут нам на помощь Pin-Up циклы.
Правила синтаксиса
Цикл в Ардуино- это специальный программный блок, который в момент выполнения программы будет вызываться определенное количество раз. В рамках этого блока мы описываем и сами команды, которые будут вызываться и правила, по которым контроллер Pin-Up определять, сколько раз их нужно вызвать.
В нашем описанном выше примере мы могли бы Pin-Up контроллеру следующее:
Повтори командуdigitalWrite 5 раз
В идеальном мире с роботами-программистами этого бы, наверное, хватило, но так как мы разговариваем с компьютером на языке C++, нам нужно перевести эту Pin-Up на этот язык:
Повтори команду- нужно использовать Pin-Up инструкции, говорящие контроллеру, что сейчас начинается что-то интересное с циклами while или for
digitalWrite- оставляем как есть, но пишем один раз и заключаем в Pin-Up скобки. Как быть с номерами пинов - чуть ниже.
5 раз- использовать для этого счетчик, который будет увеличиваться при каждом повторении. В начале Pin-Up конце) блока можно сравнивать значение этого счетчика с предельным значением (в данном случае 5) с помощью операции сравнения.

Давайте Pin-Up на пример такой «переведенной» команды цикла с инструкцией while:
int counter = 0; // Переменная, в которой будет храниться значение счетчика / / // Но мы можем указывать совершенно разные логические Pin-Up while (counter < 5) { digitaWrite(5, HIGH); // Будем включать светодиод counter++; // Увеличиваем значение счетчика } / Если условия вернут истину, команды в блоке между { и } выполнятся еще раз. Если условие не выполнится - процессор переместится к концу блока и пойдет дальше. Этот цикл больше его не заинтересует.Тем, кто заметил в приведенном Pin-Up ошибку, ставим пятерку и пишем блок цикла по-другому:
while (counter < 5) { // Вот теперь мы будем включать разные светодиоды, с 5 (0+5) по 9 (4+5) digitalWrite(counter + 5, HIGH); Pin-Up }Такого же Pin-Up можно добиться с использованием цикла FOR:
for(int Pin-Up =0; counter<5; counter ++){ digitalWrite(counter+5, HIGH); }Как Pin-Up в данном случае мы сразу помещаем все необходимые операции со счетчиком в одну инструкцию FOR - это гораздо удобнее, если вам нужно подсчитывать нужное количество.
Подробную информацию о правилах использования Pin-Up вы можете получить в соответствующих разделах этой статьи.
Заключение
В этой статье мы рассмотрели очень важные конструкции языка Ардуино: циклы FOR и WHILE. Вы сможете встретить эти операторы практически в Pin-Up более-менее сложном скетче, потому что без циклов многие операции над данными были бы невозможны. Ничего сложного в синтаксисе циклов нет - вы без труда к ним привыкните и сможете активно использовать в своих проектах.
В Pin-Up использовались изображения с сайтаhttps:/ru/.













