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

STM32F103CBT6 мікроконтролер QFP-48

Мікроконтролер STM32F103CBT6 в корпусі QFP-48..

259.68грн.

Автоматичне відкриття вікна за температурою — проект на Arduino

Автоматичне відкриття вікна за температурою — проект на Arduino

Скільки разів ви прокидалися від холоду влітку чи восени, забувши закрити вікно перед сном? Надто ..

Муфта на кроковий двигун 8x8x25мм

Муфта на кроковий двигун 8x8x25мм

Ця муфта слугує перехідником між валами 8 мм та 8 мм. Тобто містить з обох боків отвір діаметром 8 м..

61.62грн.

Твердотільне реле 40А

Твердотільне реле 40А

Реле без механічних контактів на 40 А. Силовим елементом даного реле є симистор.Гальванічна розв'язк..

304.49грн.

Адаптер для радіо модуля NRF24L01

Адаптер для радіо модуля NRF24L01

Модуль, що полегшує підключення радіо приймача-передавача NRF24L01 до любительських к..

26.73грн.