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

Разработка систем мониторинга: температура, вес, расход воды, влажность

Современный бизнес, сельское хозяйство и промышленность всё чаще нуждаются не просто в электронике..

Модуль расширения входов-выходов 4 реле и 4 DI  I2C

Модуль расширения входов-выходов 4 реле и 4 DI I2C

Интересный модуль расширения 4-х входов и 4 релейных выходов с коммуникацией I2C на основе микросхем..

475.88грн.

Arduino подключение двигателя постоянного тока и управление им.

Arduino подключение двигателя постоянного тока и управление им.

Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.1. Управл..

Видео уроки Arduino

Видео уроки Arduino

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

ESP32 WiFi модуль PLC 10DI 2AI 5REL

ESP32 WiFi модуль PLC 10DI 2AI 5REL

Популярный удобный для монтажа модуль WiFi ESP32 с программатором на борту. Программировать и диагн..

873.07грн.