Циклы 6 — Прерывание циклов

Введение

При работе с циклами в Arduino бывают ситуации, когда нужно досрочно выйти из цикла или пропустить определённую итерацию. Для этого в языке C/C++, на котором основано программирование Arduino, используются операторы break и continue, а также return для выхода из функции.

Оператор break

Оператор break немедленно завершает выполнение текущего цикла (или switch-блока) и передаёт управление на первую строку кода после него.


// Пример: выход из цикла при нахождении элемента
for (int i = 0; i < 10; i++) {
  if (i == 5) {
    break; // Выход из цикла
  }
  Serial.println(i);
}
  

Оператор continue

Оператор continue прерывает текущую итерацию цикла и сразу переходит к следующей, пропуская оставшийся код в теле цикла.


// Пример: вывод только нечётных чисел
for (int i = 0; i < 10; i++) {
  if (i % 2 == 0) {
    continue; // Пропускаем чётные числа
  }
  Serial.println(i);
}
  

Оператор return

Оператор return завершает выполнение всей функции и возвращает управление в место её вызова. Его можно использовать для досрочного выхода из loop() или любой другой функции.


void printPositive(int number) {
  if (number < 0) {
    return; // Выход, если число отрицательное
  }
  Serial.println(number);
}
  

Практика

Прерывание поиска при нахождении элемента


int values[] = {3, 7, 5, 8, 2};

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 5; i++) {
    if (values[i] == 8) {
      Serial.println("Найдено!");
      break;
    }
    Serial.println(values[i]);
  }
}

void loop() {
}
  

Пропуск чётных чисел при выводе


void setup() {
  Serial.begin(9600);
  for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
      continue;
    }
    Serial.println(i);
  }
}

void loop() {
}
  

Проект: «Сканер клавиатуры»

В этом проекте используется клавиатура 4×4 и библиотека Keypad. Сканирование останавливается при нажатии первой найденной клавиши.


#include 

const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int r = 0; r < ROWS; r++) {
    for (int c = 0; c < COLS; c++) {
      char key = keypad.getKey();
      if (key) {
        Serial.print("Нажата кнопка: ");
        Serial.println(key);
        break; // Останавливаем поиск
      }
    }
  }
}
  

Заключение

Операторы break, continue и return позволяют гибко управлять выполнением циклов и функций в Arduino, делая программы более эффективными и управляемыми.

Циклы 7 — Циклы и задержки

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Радиомодуль nRF24L01 (2,4 ГГц, SPI)

Радиомодуль nRF24L01 (2,4 ГГц, SPI)

Радиомодуль nRF24L01 (2,4 ГГц, SPI) nRF24L01 — компактный радиопередатчик‑приёмник для беспрово..

54.65грн.

NRF24L01+PA+LNA модуль 2,4 ГГц SMD с разъёмом IPEX, 18×14 мм

NRF24L01+PA+LNA модуль 2,4 ГГц SMD с разъёмом IPEX, 18×14 мм

NRF24L01+PA+LNA модуль 2,4 ГГц (SMD) с разъёмом IPEX (u.FL), 18×14 мм ..

109.98грн.

DC DC преобразователь понижающий с 4...35В до 1,25...32В 5А

DC DC преобразователь понижающий с 4...35В до 1,25...32В 5А

Модуль питания на основе специализированной микросхемы XL4005Диапазон входных напряжений 4..

95.02грн.

Винт М2,5х14мм нержавейка

Винт М2,5х14мм нержавейка

Винт из нержавейки с резьбой М2,5 для крепления элементов любительских проектовДлина резьбы 14 мм..

1.11грн.

Умный дом #1: Введение в умный дом на ESP32

Умный дом #1: Введение в умный дом на ESP32

Умный дом #1: Введение в умный дом на ESP32 Современный умный дом – это не только дорогосто..