Функции void loop () и void setup () - именно с них начинается знакомство с программированием под arduino у большинства начинающих. В этой статье мы узнаем, для чего нужны эти функции, что можно, а что нельзя в них писать, а также попробуем найти решение таких проблем как ‘redefinision of void Pin-Up часто возникающих у новичков в проектах arduino.
Содержание
Как запускается программа на Arduino

Начав выполнение программы, Arduino выполняет ряд рутинных операций по инициализации и настройке среды окружения и только затем приступает к выполнению того самого кода, который содержится в наших с вами скетчах. Таким образом, ардуино избавляет нас от необходимости помнить все детали архитектуры микропроцессора и сконцентрироваться на стоящей перед нами задаче (это не значит, что мы не должны Pin-Up что же происходит за кадром, но об этом поговорим в отдельной статье).
Для иллюстрации сказанного приведем фрагмент Pin-Up Arduino, в которых и производится вызов наших функций (файл main.cpp):
int main(void) { init(); initVariant(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } Pin-Up 0; }Функция main() - это настоящая точка входа в Pin-Up именно она вызывается первой. Как мы видим, в ней вызываются методы инициализации параметров и среды окружения, а затем и наши void setup() и, уже в цикле - void loop();
По идее, мы можем реализовать другую логику Pin-Up и сделать внутри основного метода несколько функций loop, реализуя многопоточность. Но в данной статье мы не будем этого делать. Более подробно о возможности реализации многопоточности можно прочитать вэтой замечательной статье.
Для чего нужна функция void setup()
Загрузив программу, Arduino дает нашему коду возможность поучаствовать в инициализации системы. Для этого мы должны указать микроконтроллеру команды, которые он выполнит в момент загрузки и потом забудет про них (т.е. эти команды выполнятся только один раз при старте системы). И именно с этой целью в нашей с вами программе мы должны выделить блок, в котором будут храниться эти команды. void setup(), а верней пространство внутри фигурных скобок этой функции, и Pin-Up таким местом внутри Arduino скетча.
Синтаксис void setup()
Синтаксис функции setup очень прост:
void setup(){
// тут располагаются команды подпрограммы
}
В этом примере Pin-Up setup - это название функции. Нужно писать именно так, именно в таком регистре. Слово перед названием описывает тип возвращаемых данных. В данном случае никаких данных подпрограмма не возвращает, поэтому мы должны указать слово void. Все команды должны размещаться внутри фигурных скобок {}.
Не забывайте ставить Pin-Up скобки! Потеря хотя бы одной скобки сразу сделает всю программу непонятной для ардуино. Но и лишние скобки тоже не ставьте - это так же приведет к ошибке.
Примеры void setup()
Pin-Up всего внутри void setup указываются следующие инструкции:
- pinMode с указанием номера и типа пина. Это инструкция определяет Pin-Up работы пинов ардуино.
- Serial.begin с Pin-Up скорости (чаще всего, 9600). Эта инструкция инициализирует работы с последовательным портом на указанной скорости.
- Инструкции подключения и инициализации различных объектов библиотек ардуино. Например, servo.atach(6) укажет библиотеке, что сервопривод мы подключили к 9 Pin-Up и все последующие действия код библиотеки будет совершать именно с этим портом.
- Инициализацию глобальных переменных, если мы по каким-то причинам не можем сделать это при определении переменных в глобальной области видимости.
- Pin-Up других настроек и начальных значений для переменных и объектов.
Пример:
void setup(){ Serial.begin(9600); pinMode(13, Pin-Up // 13 пин будет выходом (все остальные порты по умолчанию входы) pinMode(2, PULLUP); /atach(9); / }Если говорить об ошибке redefinision of void setup’, то она возникает в том случае, если мы подключаем Pin-Up или скетч, в котором уже есть данная функция. Это и вызывает ошибку
Функция void loop()
Функция loop это то место, куда мы должны поместить команды, которые будут Pin-Up все время, пока включена плата Arduino. Начав выполнение с первой команды, микроконтроллер дойдет до конца и сразу же перепрыгнет в начало, чтобы повторить ту же последовательность. И так бесконечное число раз (до тех пор, пока на плату будет подан электричество). Наиболее уместный перевод английского слова loop в даном случае - это цикл (петля).
По своей сути, void loop - это главная функция, точка входа в нашу программу. Arduino повторяет вызов этой функции миллионы раз в секунду, таким образом, вы Pin-Up быть уверены, что
Пример void loop()
Так хорошо знакомый пример скетча проекта Blink (маячок). Если бы не функция delay(), мы бы никогда не заметили Pin-Up светодиода, т.к. дойдя до конца, скетч начнет выполняться с первой строчки, в которой он сразу же включится.
void loop(){ digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); / И так раз за Pin-Up }Резюме
С помощью функций arduino void loop и void setup мы передаем микроконтроллеру инструкции нашего скетча. Все то, что содержится внутри блока setup выполнится один раз. Содержимое блока loop будет Pin-Up в цикле до тех пор, пока останется включенным Arduino-контроллер.












