Циклы Arduino while и do while

Разница между while и do whileЦикл while аналогичен циклу for, про который мы новорили в предыдущей статье. Основное различие заключается в том, что цикл while разделяет элементы цикла for, как будет показано ниже.

Также разберем еще один цикл, называемый циклом do while. Цикл do while всегда выполняется по крайней мере один раз, прежде чем будут выполнены какие-либо тесты, которые могут вывести выполнение программы из основного цикла.

Цикл while

Следующий скетч в точности повторяет скетч цикла for из статьи «For цикл в программировании Ардуино«, за исключением того, что в нем используется цикл while, чтобы мы могли видеть сходство между этими двумя циклами.

Структура цикла While

Цикл while имеет следующую структуру:

Цикл while начинается с ключевого слова while, за которым следует тестовое выражение между открывающейся и закрывающейся скобками. Открывающиеся и закрывающиеся фигурные скобки обозначают тело цикла.

Тестовое выражение

Как и в цикле for, в цикле while есть тестовое выражение, которое определяет, будут ли выполняться операторы в цикле или нет. Если тестовое выражение принимает значение истина, то выполняются операторы цикла дальше. Если тестовое выражение принимает значение ложь, операторы цикла не будут выполняться, но будут выполняться операторы, следующие за закрывающейся скобкой цикла, т.е. выполнение продолжается снаружи и ниже цикла.

Инициализация выражения

В цикле for было выражение инициализации как часть цикла. Цикл while может использовать любую переменную из скетча, содержащую допустимое значение. В примере скетча переменная, используемая в цикле (i), должна быть инициализирована при ее определении, иначе она будет содержать любое случайное значение.

Выражение приращения

Выражение приращения использовалось в примерах цикла for, приведенных в предыдущей статье. В примере цикла while выражение приращения помещается в тело цикла.

Как работает цикл while

В примере скетча происходит следующее:

  1. Переменная i инициализируется значением 0 при запуске эскиза.
  2. Цикл while вычисляет тестовое выражение (i < 10).
  3. Тестовое выражение принимает значение истина, т.к. i меньше 10.
  4. Поскольку тестовое выражение истинно, операторы в цикле продолжают выполняться.
  5. Текущее значение i отображается, а затем увеличивается.
  6. Когда достигнута нижняя часть цикла, выполнение снова начинается в верхней части цикла.
  7. Тестовое выражение вычисляется снова, и оно снова истинно, поэтому цикл опять выполняется.

Только когда переменная i будет увеличена до 10, выражение цикла примет значение ложь, и цикл будет завершен.

Пример while цикла 2

В приведенном ниже примере скетча, цикл while используется для подсчета чисел до 25, добавляя пять к переменной каждый раз в цикле.

На скриншоте ниже показан запущенный скетч:

Запущеный скетч

В этом скетче переменная под названием sum определена и инициализирована значением 0. Тестовое выражение в цикле while проверяет, содержит ли сумма значение меньше 25.

Внутри цикла переменная sum увеличивается на 5 каждый раз в цикле с помощью арифметического выражения:

Это выражение означает: «Добавьте 5 к переменной суммы».

Затем выводится значение, содержащееся в переменной sum, с последующей задержкой в полсекунды.

Поскольку значение переменной сначала увеличивается, а затем выводится на экран, мы видим, что сначала выводится значение 5, а не значение 0, на которое оно было инициализировано.

Хотя тестовое выражение примет значение ложь, когда sum == 25, 25 по-прежнему является последним отображенным числом. Это связано с тем, что в последний раз тестовое выражение принимает значение истина, когда sum == 20, но затем сумма увеличивается до 25 и отображается перед повторным вычислением тестового выражения.

Цикл do while

Цикл do while работает так же, как и цикл while, за исключением того, что он всегда выполняется один раз, даже если тестовое выражение принимает значение ложь.

Структура цикла do while

Цикл do while состоит из двух ключевых слов do и while, как показано ниже:

Тело цикла do while находится между открывающимися и закрывающимися фигурными скобками и содержит инструкции, которые должны выполняться в цикле.

Ключевое слово while и тестовое выражение следуют за телом цикла и заканчиваются точкой с запятой ( ; ).

Пример выполнения цикла do while

Этот пример демонстрирует работу цикла do while.

Все операторы выполняются в теле цикла перед вычислением тестового выражения.

Если сумма инициализирована до значения 25, когда она определена, как показано на скетче ниже, цикл будет запущен один раз, и будет отображено 30. Затем цикл больше не будет выполняться, так как тестовое выражение принимет значение ложь.

Используя тот же скетч, но изменив цикл do while на цикл while, как показано ниже, операторы в теле цикла никогда не будут выполняться. Это связано с тем, что тестовое выражение вычисляется перед выполнением инструкций в теле цикла. Тестовое выражение немедленно принимает значение ложь, и поэтому операторы цикла никогда не будут выполняться.

В приведенном выше примере, при запуске скетча, в окне Монитор порта не будет отображаться вывод. Цикл while принимает значение ложь, а затем выполнение переходит прямо в пустой основной цикл Arduino.

Вывод

Вот и подошла к концу очередная статья, посвященная программированию Ардуино. В этой статье мы с вами разобрали два цикла — это цикл while и цикл do while. Если вы что-то не поняли или что-то пропустили, то прочтите эту статью еще раз. Напишите свой скетч, используя данные циклы, для закрепления изученного материала.

С Уважением, МониторБанк

Добавить комментарий