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()обязана присутствовать в скетче, даже если она пустая: компилятор требует её наличия.