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

setup()

setup() запускается один раз при старте setup() — здесь настраивают пины, инициализируют библиотеки и открывают Serial до начала основного цикла.

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

Описание

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

Типичное содержимое setup():

  • настройка режимов выводов через pinMode()
  • инициализация последовательного порта командой Serial.begin()
  • запуск библиотек — например, Wire.begin() для I²C или SPI.begin() для SPI
  • установка начальных значений переменных и состояний

После того как setup() завершит работу, управление переходит к функции loop(), которая уже выполняется циклически.

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

  • Отладка через Serial MonitorSerial.begin(9600) в setup() открывает порт до того, как скетч начнёт что-то делать, и вы не пропустите первые сообщения.
  • Работа с дисплеями и сенсорами — большинство библиотек требуют вызова метода begin() перед использованием; setup() — правильное место для этого.
  • Настройка прерыванийattachInterrupt() вызывают один раз при старте, чтобы прерывание было готово к работе ещё до входа в loop().
  • Управление выводами — если нужно сразу установить на пине определённый уровень (например, удержать реле выключенным при старте), это делают здесь.

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

  • setup() не возвращает значений и не принимает параметров — её сигнатура всегда void setup().
  • Код в setup() выполняется строго один раз. Если нужно повторить инициализацию в процессе работы, вынесите её в отдельную функцию и вызывайте из loop().
  • Порядок вызовов внутри setup() важен: например, Serial.begin() нужно вызвать до любого Serial.print(), иначе первые сообщения будут потеряны.
  • Если setup() занимает много времени (например, ждёт подключения к сети), плата не будет реагировать ни на что другое — весь остальной код стоит на месте.
  • Даже если скетч не требует никакой инициализации, функция setup() всё равно должна присутствовать в коде — пустая, но обязательная.

Пример кода

    int buttonPin = 3;

    void setup() {
      Serial.begin(9600);
      pinMode(buttonPin, INPUT);
    }

    void loop() {
      // ...
    }

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