Главная chevron_right Структура chevron_right Скетч chevron_right loop()

loop()

loop() — главный бесконечный цикл Arduino-скетча: всё, что должно работать постоянно — опрос датчиков, кнопок, управление моторами — пишется именно здесь.

Полная статья

Описание

Каждый Arduino-скетч строится вокруг двух обязательных функций: setup() и loop(). Первая запускается один раз при старте — настраивает пины, инициализирует библиотеки, задаёт начальные значения. Вторая, loop(), запускается сразу после и работает в бесконечном цикле: как только тело функции выполнилось до конца, Arduino немедленно начинает его снова.

Именно в loop() живёт основная логика вашей программы: опрос датчиков, чтение кнопок, управление моторами, отправка данных по Serial — всё, что должно происходить постоянно, пока плата включена.

Где применяется

  • Мигание светодиода — включить, подождать, выключить, подождать, и так по кругу.
  • Чтение датчика — каждую итерацию снимать показания температуры или освещённости и выводить в Serial Monitor.
  • Обработка кнопок — непрерывно проверять состояние пина и реагировать на нажатие.
  • Управление сервоприводом или мотором — пересчитывать положение на основе входных данных и обновлять выход.

Пример кода

    int buttonPin = 3;

    // setup инициализирует serial и пин кнопки
    void setup() {
      Serial.begin(9600);
      pinMode(buttonPin, INPUT);
    }

    // loop каждый раз проверяет состояние пина кнопки
    // и отправляет данные по serial, если кнопка нажата
    void loop() {
      if (digitalRead(buttonPin) == HIGH) {
        Serial.write('H');
      }
      else {
        Serial.write('L');
      }

      delay(1000);
    }

Практические замечания

  • loop() не возвращает значений и не принимает параметров — сигнатура всегда void loop().
  • Функция выполняется без каких-либо пауз между итерациями, если вы сами их не добавите через delay() или не используете логику на основе millis().
  • Если внутри loop() есть долгий delay(), плата в это время не реагирует ни на что другое. Для более отзывчивого кода используйте millis() вместо delay().
  • Переменные, объявленные внутри loop(), создаются заново при каждом вызове. Если значение должно сохраняться между итерациями — объявляйте переменную глобально или используйте ключевое слово static.
  • loop() обязана присутствовать в скетче, даже если она пустая: компилятор требует её наличия.

Полезные материалы