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

Розробка друкованих плат на замовлення — професійне проєктування PCB для бізнесу

Розробка друкованих плат на замовлення — професійне проєктування PCB для бізнесу Розробка друко..

Шарніри під обертальну вісь 8, 10 мм 2шт.

Шарніри під обертальну вісь 8, 10 мм 2шт.

Такі шарніри призначені для кріплення вісі черв'ячної передачі на будь-якій з трьох осей переміщення..

164.87грн.

Як працює Arduino

Як працює Arduino

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

Міні кнопка 12 x 12 x 4,3 мм

Міні кнопка 12 x 12 x 4,3 мм

Мініатюрна кнопка для встановлення на плату через отвориРозміри 12 x 12 x 4,3 мм..

4.14грн.

Муфта на кроковий двигун 5x5x25мм

Муфта на кроковий двигун 5x5x25мм

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

60.04грн.