Цикли 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Ємнісний датчик вологості грунту аналоговий

Ємнісний датчик вологості грунту аналоговий

Ємнісний датчик вологості ґрунту V1.2 — надійний та точний інструмент для вимірювання рівня вологост..

55.36грн.

Arduino SIM800 відправка SMS

Arduino SIM800 відправка SMS

Привіт колеги! Сьогодні ми дісталися нарешті однієї з найцікавіших тем, що стосуються GSM-модуля SIM..

Розробка IoT пристроїв під ключ

Розробка IoT пристроїв під ключ

Розробка IoT пристроїв під ключ Потрібен IoT пристрій під ключ — від ідеї..

Плата захисту балансування 2-х літій-іонних акумуляторів 7,4В

Плата захисту балансування 2-х літій-іонних акумуляторів 7,4В

Контролер BMS захисту двох 18650 акумуляторів з балансиром Захисна плата літієвої батареї, захист в..

112.18грн.

Трансформатор струму 0-100А

Трансформатор струму 0-100А

Аналоговий датчик змінного струму силою до 100А. Це роз'ємний трансформатор струму з діаметром отвор..

268.69грн.