setup()
setup() запускается один раз при старте setup() — здесь настраивают пины, инициализируют библиотеки и открывают Serial до начала основного цикла.
Полная статья
Описание
Каждый скетч Arduino начинается с двух обязательных функций: setup() и loop(). Функция setup() — первое, что выполняет плата после включения питания или нажатия кнопки Reset. Она запускается ровно один раз, и именно здесь нужно сделать всё, что требуется подготовить до начала основной работы программы.
Типичное содержимое setup():
- настройка режимов выводов через
pinMode() - инициализация последовательного порта командой
Serial.begin() - запуск библиотек — например,
Wire.begin()для I²C илиSPI.begin()для SPI - установка начальных значений переменных и состояний
После того как setup() завершит работу, управление переходит к функции loop(), которая уже выполняется циклически.
Где применяется
- Отладка через Serial Monitor —
Serial.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() {
// ...
}