Функции Arduino: void loop() и void setup() — 4 особенности

0 13 Программирование

Arduino IDE — это интегрированная среда разработки для контроллеров Arduino, которая позволяет написать, загрузить и отладить код. Её можно скачать с официального сайта: www.arduino.cc

Среда программирования Arduino включает в себя две важные функции setup()и loop(), которые необходимы во всех скетчах (программах). Эти функции используются для инициализации переменных и выполнения повторяющихся задач соответственно.

Setup() и loop()

Функция setup()вызывается один раз при включении или сбросе платы Arduino. Эта функция используется для инициализации переменных, настройки режимов выводов и запуска библиотек. Обычно он используется для настройки начальных условий скетча и вызывается только один раз в течение жизни скетча.1 5

С loop()другой стороны, функция вызывается многократно в бесконечном цикле. Он используется для выполнения повторяющихся задач, таких как считывание показаний датчиков и управление исполнительными механизмами. Функция цикла является сердцем скетча и реализует большую часть логики программирования.

Пример скетча

Вот пример простого скетча Arduino, в котором используются функции setup()и loop():

В этом примере setup()функция инициализирует последовательную связь со скоростью 9600 бит/с и loop()отправляет сообщение «Привет, Arduino!» по серийному номеру и ждет 1 секунду перед повторением процесса.

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

Void setup()

void setup(){

// тут располагаются команды подпрограммы

}

Void loop()

void loop(){

 digitalWrite(13, HIGH);
 delay(1000);
 digitalWrite(13, LOW);
 delay(1000);

// Дойдя до сюда, ардуино вернется на первую строчку и опять начнет выполнение всех инструкций. И так раз за разом

}

Особенность кода

Еще одним важным аспектом, который следует учитывать при работе с функциями setup()и loop(), является порядок выполнения кода. Функция setup()вызывается только один раз, в начале скетча, при этом loop()функция вызывается многократно. В результате любой код, помещенный в setup()функцию, будет выполнен только один раз, а код внутри loop()функции будет выполняться несколько раз.

Например, если у вас есть переменная, которую нужно инициализировать только один раз, вы должны поместить этот код в setup()функцию. С другой стороны, если у вас есть код, который нужно выполнять многократно, например, для считывания показаний датчика или управления исполнительным механизмом, вы должны поместить этот код в loop()функцию.3 11

Также стоит отметить, что loop()функция должна быть максимально эффективной, поскольку она будет вызываться многократно. В общем, вам следует избегать использования долго работающих функций или задержек внутри loop()функции, так как они могут привести к тому, что скетч перестанет отвечать на запросы или вызовет задержки в других задачах.

Кроме того, вы можете использовать эту setup()функцию для некоторых других важных вещей, таких как установка режимов контактов для ввода и вывода, запуск последовательной связи, настройка скорости передачи данных, подключение к Wi-Fi или другим сетевым подключениям и т. д.

Глобальные переменные

Другим важным аспектом, который следует учитывать при работе с функциями setup()и loop(), является использование глобальных переменных. Глобальные переменные — это переменные, объявленные вне какой-либо функции и доступные из любого места скетча. Эти переменные могут быть полезны для хранения значений, к которым должен обращаться несколько функций, но они также могут привести к непредвиденному поведению, если они не используются должным образом.

При работе с глобальными переменными важно инициализировать их внутри setup()функции, а не вне какой-либо функции. Это гарантирует правильную инициализацию переменных перед их использованием в loop()функции или любой другой функции. Неспособность инициализировать глобальные переменные может привести к непредсказуемому поведению и ошибкам в вашем скетче.0

Также важно учитывать область действия ваших переменных. Переменная, объявленная внутри setup()функции или loop()функции, будет доступна только внутри этой функции и не будет доступна другим функциям. С другой стороны, переменная, объявленная вне какой-либо функции, доступна любой функции внутри скетча.

Еще одна вещь, которую следует учитывать, это то, что при работе с несколькими глобальными переменными важно отслеживать их значения и то, как они изменяются, поскольку это может привести к ошибкам и неожиданному поведению. Хорошей практикой было бы использование комментариев для объяснения их назначения, а также ожидаемых значений и диапазонов.

Библиотеки

Другим важным аспектом функций setup()и loop()является использование библиотек. Библиотеки — это наборы предварительно написанного кода, которые можно легко импортировать в ваш эскиз для добавления функциональности. Например, библиотека Arduino Servo позволяет управлять серводвигателями всего несколькими строками кода.

При использовании библиотек в скетче важно включить необходимые файлы заголовков библиотек в верхнюю часть скетча и вызвать соответствующие библиотечные функции внутри функций setup()и loop().mjpw2utqwgu

Эта setup()функция является идеальным местом для инициализации библиотечных функций, которые необходимо настроить только один раз, таких как открытие последовательного порта или инициализация сетевого подключения. Эта loop()функция является идеальным местом для вызова библиотечных функций, которые необходимо многократно выполнять, таких как считывание значений датчиков или управление исполнительными механизмами.

Также важно помнить, что некоторые библиотеки могут вызывать конфликты с другими библиотеками или с функциональностью функций setup()и loop(). Важно тщательно протестировать свой эскиз и ознакомиться с используемыми библиотеками, чтобы убедиться, что они работают должным образом и не вызывают конфликтов.

Прерывания

Еще одна важная вещь, которую следует учитывать при работе с функциями setup()и loop(), — это использование прерываний. Прерывания — это способ временной остановки нормального выполнения loop()функции для выполнения определенной задачи, такой как реакция на нажатие кнопки или показания датчика. Прерывания могут быть полезны для создания отзывчивых и эффективных скетчей, поскольку они позволяют реагировать на события без постоянного опроса датчиков или ожидания задержек в работе loop()функции.

При работе с прерываниями важно иметь в виду, что setup()функция — это место, где вы должны настроить прерывания, и loop()функция не должна быть заблокирована какой-либо задержкой или длительными функциями. Таким образом, прерывание может быть выполнено в любое время, и ваш скетч останется отзывчивым.

4 8

Также важно помнить, что код, выполняемый в подпрограмме обслуживания прерывания (ISR), должен быть как можно короче и эффективнее, поскольку он временно остановит выполнение loop()функции.

Вы также должны знать, что глобальные переменные, доступ к которым осуществляется внутри ISR, могут вызвать неожиданное поведение, если к ним также обращаются внутри loop()функции, поскольку loop()функция может быть прервана в любое время. Чтобы избежать этого, рекомендуется использовать в ISR только локальные переменные.

В заключение, прерывания — это мощный инструмент для создания отзывчивых и эффективных эскизов при работе с функциями setup()и . loop()Они позволяют реагировать на события, не опрашивая постоянно датчики и не дожидаясь задержек в работе loop()функции. Чтобы эффективно использовать прерывания, важно сконфигурировать их в setup()функции, сделать код ISR максимально коротким и эффективным, а также помнить о потенциальных конфликтах с глобальными переменными.

Конечные автоматы

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

При работе с конечными автоматами важно помнить, что setup()функция — это место, где вы должны инициализировать начальное состояние и любые другие необходимые переменные. Затем loop()функция должна использовать оператор switch или оператор if-else для проверки текущего состояния и выполнения соответствующего кода.

Также важно помнить, что код в каждом состоянии должен быть специфичным для этого состояния и не иметь никакого влияния на другие состояния. Таким образом, скетч останется предсказуемым и легко устраняемым.

Вы также должны знать, что конечные автоматы могут использоваться в сочетании с прерываниями и библиотеками для создания сложных и чувствительных скетчей. Например, вы можете использовать прерывания для перехода между состояниями в ответ на показания датчиков или нажатия кнопок, а также использовать библиотеки для выполнения определенных задач в каждом состоянии.

В заключение можно сказать, что конечные автоматы — это мощный инструмент для создания сложных и надежных эскизов при работе с функциями setup()и . loop()Они позволяют организовать код и эффективно обрабатывать различные сценарии. Чтобы эффективно использовать конечные автоматы, важно инициализировать начальное состояние в setup()функции, использовать оператор switch или оператор if-else для проверки текущего состояния в loop()функции и сохранять код в каждом состоянии, специфичном для этого состояния. Конечные автоматы также можно использовать в сочетании с прерываниями и библиотеками для создания сложных и чувствительных скетчей.

Оцените статью
Информация об Ардуино
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я принимаю политику конфиденциальности.