Цикли 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 — корисний інструмент для ситуацій, коли виконання коду залежить від умов, що можуть змінюватися під час роботи програми. Однак його використання вимагає уважності, щоб уникнути зациклення і «заморожування» скетчу.





