Циклы 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Автоматическое управление твердотопливным котлом Arduino Nano

Автоматическое управление твердотопливным котлом Arduino Nano

Предмет проекта домашней автоматики Вашему вниманию представлен большой проект - автоматический щит..

Датчик температуры скорлупы яиц инкубаторный WiFi

Датчик температуры скорлупы яиц инкубаторный WiFi

Устройство предназначено для 4-канального измерения и регистрации температуры поверхности скорлупы 4..

4900.00грн.

Аудио штекер 3,5мм папа с винтовым клеммником

Аудио штекер 3,5мм папа с винтовым клеммником

Стерео штекер 3,5 мм для монтажа цепей передачи звукового сигнала при помощи винтового клеммника.Выв..

94.08грн.

Драйвер шагового двигателя DRV8825 для шилда RAMPS

Драйвер шагового двигателя DRV8825 для шилда RAMPS

Драйвер шагового двигателя для системы RAMPS. Устанавливается на специальный CNC-шилд Arduino д..

104.31грн.

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

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

Как работает Arduino Arduino базовая архитектураЯдром платформы Arduino является микросхема-мик..