Arduino while loop

The Arduino while and do while Loops

Created on: 12 October 2014
Updated on: 25 January 2017

Part 8 of the Arduino Programming Course

The while loop is similar to the for loop that was explained in the previous part of this Arduino programming course. The main difference is that the while loop separates the elements of the for loop as will be shown.

Another loop called the do while loop is also covered. The do while loop is always run at least once before any tests are done that could break program execution out of the loop.

The while Loop

The sketch that follows does exactly the same as the for loop sketch from part 7 of this course, except that it uses the while loop so that we can see the similarities between the two loops.

while Loop Structure

The while loop has a structure as follows:

The while loop starts with the while keyword followed by a test expression between opening and closing parentheses. Opening and closing braces denote the body of the loop.

Test Expression

As with the for loop, the while loop has a test expression that will determine whether the statements in the loop will run or not. If the test expression evaluates to true, the loop statements are run. If the test expression evaluates to false, the loop statements will not be run, but the statements that follow the closing brace of the loop will be run – i.e. execution continues outside and below the loop.

Initialize Expression

The for loop had an initialize expression as part of the loop. The while loop can use any variable from the sketch that contains a valid value. In the example sketch, the variable used in the loop (i) must be initialized when it is defined, otherwise it will contain any random value.

Increment Expression

An increment expression was used in the for loop examples in the previous part of this course. In the while loop example, the increment expression is placed inside the loop body.

How the while Loop Example Works

In the example sketch, the following happens:

  1. The variable i is initialized to 0 when the sketch starts running.
  2. The while loop evaluates the test expression (i —>

In this sketch, a variable called sum is defined and initialized to 0. The test expression in the while loop tests if sum contains a value less than 25.

Inside the loop, the sum variable is incremented by 5 each time through the loop by the arithmetic expression:

This expression means «add 5 to the sum variable».

The value that the sum variable holds is then printed out, followed by a half-second delay.

Because the value of the variable is first incremented and then printed out, we see the value 5 printed first and not the value of 0 that it was initialized to.

Although the test expression will evaluate to false when sum == 25, 25 is still the last number that is printed. This is because the last time that the test expression evaluates to true is when sum == 20, but sum is then incremented to 25 and printed before the test expression is evaluated again.

Books that may interest you:

The do while Loop

The do while loop works in the same way as the while loop, except that it always runs once even if the test expression evaluates to false.

do while Loop Structure

The do while loop consists of two keywords do and while, as shown below.

The body of the do while loop falls between opening and closing braces and contains statements that are to be run in the loop.

The while keyword and test expression come after the body of the loop and are terminated by a semicolon (;).

do while Loop Example

This example demonstrates the do while loop.

All the statements are run in the loop body before the test expression is evaluated.

If sum is initialized to a value of 25 when it is defined, as shown in the sketch below, the loop will run once and 30 will be printed. The loop will then not run again because the test expression evaluates to false.

Using the same sketch, but changing the do while loop to a while loop, as shown below, the statements in the loop body will never run. This is because the test expression is evaluated before executing statements in the loop body. The test expression immediately evaluates to false, so the loop statements will never run.

In the above example, no output will be seen in the serial monitor window when the sketch is run. The while loop evaluates to false and then execution drops straight into the empty main Arduino loop.

Источник

Циклы

Цикл – это блок кода, который выполняется сверху вниз и повторяется с начала, когда достигает конца. Продолжается это дело до тех пор, пока выполняется какое то условие. Есть два основных цикла, с которыми мы будем работать, это for и while .

Цикл for

Цикл for , в простонародии счётчик. При запуске принимает три настройки: инициализация, условие и изменение. Цикл for обычно содержит переменную, которая изменяется на протяжении работы цикла, а мы можем пользоваться её значением в своих целях.

  • Инициализация – здесь обычно присваивают начальное значение переменной цикла. Например: int i = 0;
  • Условие – здесь задаётся условие, при котором выполняется цикл. Как только условие нарушается, цикл завершает работу. Например: i
  • Изменение – здесь указывается изменение переменной цикла на каждой итерации. Например: i++;

В теле цикла мы можем пользоваться значением переменной i , которая примет значения от 0 до 99 на протяжении работы цикла, после этого цикл завершается. Как это использовать? Вспомним предыдущий урок про массивы и рассмотрим пример:

Именно при помощи цикла for очень часто работают с массивами. Можно сложить все элементы массива для поиска среднего арифметического:

Что касается особенностей использования for в языке C++: любая его настройка является необязательной, то есть её можно не указывать для каких-то особенных алгоритмов. Например вы не хотите создавать переменную цикла, а использовать для этого другую имеющуюся переменную. Пожалуйста! Но не забывайте, что разделители настроек (точка с запятой) обязательно должны присутствовать на своих местах, даже если настроек нет!

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

Также в цикле может вообще не быть настроек, и такой цикл можно считать вечным:

Использование замкнутых циклов не очень приветствуется, но иногда является очень удобным способом поймать какое-то значение, или дать программе “зависнуть” при наступлении ошибки. Выйти из цикла при помощи оператора break , о нём поговорим чуть ниже.

Цикл “for each”

В свежих версиях компилятора появилась поддержка аналога цикла foreach, который есть в некоторых других языках программирования. Реализация позволяет сократить код для прохода по любому массиву данных. Рассмотрим типичный пример вывода массива чисел в порт, как в уроке про массивы:

Как это работает: мы завели цикл for с переменной-счётчиком i , который меняется от 0 до размера массива, который вы вычисляем через sizeof() . Внутри цикла мы используем счётчик как индекс массива, чтобы обратиться к каждой его ячейке как [i] . Но цикл for для работы с массивом можно записать более красиво:

В нашем примере вывода это будет выглядеть так:

Как это работает: мы создаём переменную val такого же типа как массив, а также указываем имя массива через двоеточие. На каждой итерации цикла переменная val будет принимать значение ячейки массива в порядке от 0 до размера массива с шагом 1. Таким образом мы решили ту же задачу, но написали меньше кода.

Важный момент: на каждой итерации цикла значение ячейки присваивается к переменной val , то есть фактически мы можем только прочитать значение (через буферную переменную). Для непосредственного доступа к элементам массива нужно создавать ссылку, то есть просто добавить оператор &

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

В такой реализации цикла for у нас нет счётчика, что может быть неудобным для некоторых алгоритмов, но счётчик всегда можно добавить свой. Например забьём массив числами от 0 до 90 с шагом 10:

И это будет всё ещё компактнее классического for .

Оператор break

Оператор break (англ. “ломать”) позволяет выйти из цикла. Использовать его можно как по условию, так и как-угодно-удобно. Например давайте досрочно выйдем из цикла при достижении какого-то значения:

Или вот такой абстрактный пример, покинем “вечный” цикл при нажатии на кнопку:

Выход из цикла является не единственным интересным инструментом, ещё есть оператор пропуска – continue .

Оператор continue

Оператор continue (англ. “продолжить”) досрочно завершает текущую итерацию цикла и переходит к следующей. Например давайте заполним массив, как делали выше, но пропустим один элемент:

Таким образом элемент под номером 10 не получит значения 25, итерация завершится до операции присваивания.

Цикл while

Цикл while (англ. “пока”), он же “цикл с предусловием”, выполняется до тех пор, пока верно указанное условие. Если условие изначально неверно, цикл будет пропущен, не сделает ни одной итерации. Объявляется очень просто: ключевое слово while , далее условие в скобках, и вот уже тело цикла:

Хммм, вам не кажется знакомым действие этого примера? Всё верно, это полный аналог цикла for с настройками (int i = 0; i . Единственное отличие в том, что на последней итерации i примет значение 10 , так как на значении 9 цикл разрешит выполнение. Ещё интересный вариант, который можно встретить на просторах чужого кода. Работает на основе того факта, что любое число кроме нуля обрабатывается логикой как true :

Цикл while тоже удобно использовать как вечный цикл, например, ожидая наступление какого-либо события (нажатие кнопки):

Пока условие не произойдёт, код не пойдёт дальше, застрянет на этом цикле. Как вы уже поняли, оператор if тут не нужен, нужно указывать именно логическое значение, можно даже вот так:

Всё, вертимся здесь бесконечно! Помимо цикла с предусловием есть ещё цикл с постусловием, так называемый do while

Цикл do while

do while – “делать пока”, работа этого цикла полностью аналогична циклу while за тем исключением, что здесь условие задаётся после цикла, т.е. цикл выполнится как минимум один раз, затем проверит условие, а не наоборот. Пример:

Где применять? Да где угодно, по ходу написания собственных программ вы почувствуете, где удобнее использовать тот или иной цикл.

Видео

Источник

Explain the while loop in Arduino with the help of examples

What is a while loop

Loops are very handy in any situation, especially when we want to repeat the same process according to some condition.To understand the usage of the while loop, let’s say, we have a user who has 30 components of the project and we ask the user to input the name of the component after every minute till 30 minutes. If we write the code in which after every 1 min, it is asked the user to enter the component and then print it, and again after 1 minute asks the user to enter input till 30 minutes, it will consume a lot of time as well as the code will become bulky which reduces the efficiency of code

This can be made easy by using the while loop, in which we can put the condition of time in the while loop that is less than 30 min, and ask the user to enter a component after every minute. This will be a code of about 5-6 lines and will fulfill the purpose as well.

Likewise, it can be used in Arduino programming. First, we will discuss the general syntax of using a while loop in Arduino programming.

Syntax of using the “while loop” in Arduino

The general syntax of using the “while loop” is:

The explanation of the above syntax is very easy to understand:

  • Write any condition in the round brackets “()” with the “while” keyword, till that condition is true the system will execute the code written in the body of the while loop
  • If the condition is false, it will exit from the body of the while loop

What is the flow chart of the while loop in Arduino

The most convenient way to understand the usage concept of anything is through visual explanation. For the visual understanding of the “while loop” in Arduino, consider the flow chart:

When the while loop is executed, the compiler will initialize the while loop and check the condition. If a condition is true, the compiler will execute the code of the body of the while loop, and if it is false it will skip the execution of the while loop body, and the compiler will execute the next statements outside the while loop.

What is Arduino programming structure

Before moving to the examples, first, have a little bit of understanding of Arduino programming structure. In Arduino programming, we have two main components in the program structure:

void setup(): The void setup function runs only once, as it is the beginning of the program. You can declare different variables, and take different inputs from the user. For example turning a circuit on, that would happen only once.

void loop(): In this function the code runs infinitely like if we want to run LEDs for an infinite time period, we can use void loop()

Now, we will consider some examples of the while loop in Arduino which will help us understand the usage of the while loop.

Example 1: Consider the following code:

Explanation: The above code is simple which displays the “Welcome to LinuxHint” ten times in the serial monitor output. The explanation of the code is:

  • We declared a variable “i” and stored “1” in it
  • For serial communication, at the baud rate 9600, we used “Serial.begin(9600)” function
  • Used the while loop as discussed in the general syntax and conditioned it to execute the loop until the value of “i” is equal and less than 10
  • As we are using Arduino connected to the computer, we will use the serial communication for printing “Welcome to LinuxHint”
  • In the last statement, we are incrementing the value of “i” by 1

To display the output, we will verify, upload, and then with the help of serial communication run the code:

In the above output, we can see that “Welcome to LinuxHint” is printed on the serial monitor output six times because when the value of “i” is incremented to 7 the condition becomes false, the compiler was out of the loop.

Example 2: Now, consider the following code:

Explanation: In this code, we are displaying the number of iterations and the explanation to the above code is:

  • We declared a variable “i” with a value of 0
  • We used serial communication to connect Arduino to the computer and set the baud rate (9600)
  • With the help of the while loop, we increment the value of “i” to the number of iterations by setting the condition of “i

About the author

Hammad Zahid

I’m an Engineering graduate and my passion for IT has brought me to Linux. Now here I’m learning and sharing my knowledge with the world.

Источник

Adblock
detector