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

Уроки Arduino структура програми для початківців

Доброго дня, друзі! Вы великі молодці, що зацікавились уроками Arduino! Структура програми в Ardu..

Термопара K-типу -100...800°C 5х100мм

Термопара K-типу -100...800°C 5х100мм

Термопара K-типу (ТХА, хромель-алюмель) використовується для вимірювання високих температур до 1250&..

292.25грн.

Адаптер USB 2.0 в TTL UART

Адаптер USB 2.0 в TTL UART

Комунікаційний конвертер USB 2.0 в TTL UARTЗаснований на мікросхемі CP2102Містить самовідновлюв..

125.05грн.

Модуль годинника реального часу DS1302

Модуль годинника реального часу DS1302

Модуль годин реального часу на основі мікросхеми DS1302 призначений для роботи з контролерами Ardu..

50.25грн.

Сенсорні входи ESP32

Сенсорні входи ESP32

Привіт друзі! Тема статті: ESP32 сенсорні входиВи напевно вже чули, що у контролера ESP32 є апаратні..