Циклы 3 — Цикл while

Введение

Цикл while — это конструкция, которая выполняет код до тех пор, пока заданное условие истинно. Он часто используется в ситуациях, когда количество повторений заранее неизвестно, а завершение цикла зависит от определённого события или состояния.

Как работает while

Синтаксис цикла while очень прост:


while (условие) {
  // код, который будет выполняться
}
  

Перед каждой итерацией цикла проверяется условие. Если оно истинно (true), выполняется тело цикла, после чего условие снова проверяется.

Бесконечный и условный while

  • Бесконечный while — условие всегда истинно, например while(true). Такой цикл будет выполняться вечно, если его не прервать с помощью break или перезапуска программы.
  • Условный while — выполняется до тех пор, пока условие не станет ложным, например while(digitalRead(buttonPin) == LOW).

Опасность зацикливания

Основная опасность при работе с while — непреднамеренное зацикливание, когда условие никогда не становится ложным. Это может «заморозить» программу, особенно если цикл находится внутри loop() и нет выхода из него.

Практика

Ожидание нажатия кнопки

Программа ждёт, пока кнопка будет нажата:


const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  Serial.println("Ожидание нажатия...");
  while (digitalRead(buttonPin) == HIGH) {
    // Ждём
  }
  Serial.println("Кнопка нажата!");
  delay(1000);
}
  

Измерение времени удержания кнопки


const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  Serial.println("Нажмите и удерживайте кнопку...");
  
  while (digitalRead(buttonPin) == HIGH) {
    // Ждём начала нажатия
  }
  
  unsigned long startTime = millis();
  
  while (digitalRead(buttonPin) == LOW) {
    // Кнопка удерживается
  }
  
  unsigned long holdTime = millis() - startTime;
  Serial.print("Время удержания: ");
  Serial.print(holdTime);
  Serial.println(" мс");
  
  delay(1000);
}
  

Проект: «Секундомер запуска»

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


const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  Serial.println("Готов к старту! Нажмите кнопку для запуска.");
  
  while (digitalRead(buttonPin) == HIGH) {
    // Ждём нажатия
  }
  
  unsigned long startTime = millis();
  Serial.println("Отсчёт начался!");
  
  while (digitalRead(buttonPin) == LOW) {
    // Кнопка удерживается
  }
  
  while (digitalRead(buttonPin) == HIGH) {
    // Ждём второго нажатия
  }
  
  unsigned long stopTime = millis();
  unsigned long elapsed = stopTime - startTime;
  
  Serial.print("Время: ");
  Serial.print(elapsed);
  Serial.println(" мс");
  
  delay(2000);
}
  

Заключение

Цикл while — полезный инструмент для ситуаций, когда выполнение кода зависит от условий, которые могут изменяться в процессе работы программы. Однако его использование требует внимательности, чтобы избежать зацикливания и «заморозки» скетча.

Циклы 4 — Цикл do...while

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Клапан электромагнитный 24 В 100 мА

Клапан электромагнитный 24 В 100 мА

Электромагнитный клапан нормально закрытыйВнешний диаметр короткой трубки 6 ммВнешний диаметр боково..

190.56грн.

Магнитный сенсор A3144. Датчик Холла с дискретным выходом.

Магнитный сенсор A3144. Датчик Холла с дискретным выходом.

Магнитный сенсор A3144 (датчик Холла с дискретным выходом)Магнитный сенсор A3144 — это однополюсный ..

10.10грн.

Видео уроки Arduino

Видео уроки Arduino

Курс уроков Arduino будет полезен любому исследователю окружающего мира ..

Циклы 8 — Оптимизация циклов

Циклы 8 — Оптимизация циклов

Циклы 8 — Оптимизация циклов Введение Оптимизация циклов в Arduino особенно важна, когда..

Концевик с колесом для 3D принтера или CNC ramps 1.4

Концевик с колесом для 3D принтера или CNC ramps 1.4

Концевой выключатель для установки на 3D-принтер или CNC-станок системы ramps 1.4В комплекте ка..

52.29грн.