Что такое void setup в ардуино

Функции void loop и void setup Ардуино

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуино

Функции void loop () и void setup () в Aduino IDE — это первое с чем сталкивается любой, кто начинает знакомство с языком программирования микроконтроллеров Ардуино. Разберем для чего нужны в скетче данные функции, что следует размещать внутри циклов. Данные правила относятся ко всем платам — от Arduino UNO до Arduino MEGA и перед изучением языка Aduino IDE, следует подробно изучить данные функции.

Процедуры void loop и void setup

Данные циклы должны быть в каждом скетче и вызываться только один раз, даже если один из циклов не используется. Дело в том, что при запуске микроконтроллера Arduino, начинают работать встроенные микропрограммы, которые первым делом проверяют не началась загрузка новой программы с компьютера. Если пользователь не начал прошивку, то контроллер начинает выполнять ранее загруженный скетч.

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуиноИспользовать два раза void loop Arduino нельзя

Оба цикла вызываются встроенной функцией main() из файла main.cpp. При этом функция void setup () вызывается один раз, а и void loop() вызывается в цикле for бесконечное количество раз. Если в вашем скетче будет присутствовать более одного раза функция void setup() или void loop(), то при компиляции Aduino IDE выдаст ошибку: redefinition of ‘void setup()‘ или redefinition of ‘void loop()’, соответственно.

Описание void setup () в Arduino

Функция setup в Aduino IDE имеет следующую конструкцию:

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

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуиноПример использования основных процедур в Arduino IDE

Описание void loop () в Arduino

После выполнения цикла setup, программа переходит в цикл loop, который будет повторяться до тех пор, пока на плату подано питание. Если цикл содержит одну команду, то она будет выполняться тысячи раз в секунду. Если вы решите написать скетч для мигания светодиодом на Arduino, то необходимо добавлять в код задержку для выполнения программы, иначе мигания светодиода не будет заметно.

Функция loop в Aduino IDE имеет следующую конструкцию:

Таким образом, если вам необходимо при запуске программы включить один раз светодиод для индикации работы устройства на микроконтроллере Arduino Nano, то команду лучше написать в цикле void setup(). Если в программе необходимо выполнять какое-то действие постоянно, например, получать данные с ультразвукового дальномера HC-SR04, то команду следует располагать в цикле void loop ().

Источник

Функции arduino void loop () и void setup ()

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

Как запускается программа на Arduino

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуиноКогда мы подключаем плату Arduino к питанию, то внутри него начинается весьма бурная деятельность встроенных микропрограмм. Микроконтроллер сконфигурирован так, что при запуске системы управление получает программа-загрузчик. Первое, что делает загрузчик – проверяет в течение 1-2 секунд, не начнется ли от пользователя отправка новой программы. Если процесс перепрограммирования начат, то скетч загружается в память и управление отдается ему. Если новых программ нет, то загрузчик выполняет ранее сохраненную программу.

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

Для иллюстрации сказанного приведем фрагмент исходников Arduino, в которых и производится вызов наших функций (файл main.cpp):

Функция main() – это настоящая точка входа в программу, именно она вызывается первой. Как мы видим, в ней вызываются методы инициализации параметров и среды окружения, а затем и наши void setup() и, уже в цикле – void loop();

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

Для чего нужна функция void setup()

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

Синтаксис void setup()

Синтаксис функции setup очень прост:

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

В этом примере слово setup – это название функции. Нужно писать именно так, именно в таком регистре. Слово перед названием описывает тип возвращаемых данных. В данном случае никаких данных подпрограмма не возвращает, поэтому мы должны указать слово void. Все команды должны размещаться внутри фигурных скобок <>.

Не забывайте ставить фигурные скобки! Потеря хотя бы одной скобки сразу сделает всю программу непонятной для ардуино. Но и лишние скобки тоже не ставьте – это так же приведет к ошибке.

Примеры void setup()

Чаще всего внутри void setup указываются следующие инструкции:

Если говорить об ошибке redefinision of void setup’, то она возникает в том случае, если мы подключаем модуль или скетч, в котором уже есть данная функция. Это и вызывает ошибку

Функция void loop()

Функция loop это то место, куда мы должны поместить команды, которые будут выполняться все время, пока включена плата Arduino. Начав выполнение с первой команды, микроконтроллер дойдет до конца и сразу же перепрыгнет в начало, чтобы повторить ту же последовательность. И так бесконечное число раз (до тех пор, пока на плату будет подан электричество). Наиболее уместный перевод английского слова loop в даном случае – это цикл (петля).Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуино

По своей сути, void loop – это главная функция, точка входа в нашу программу. Arduino повторяет вызов этой функции миллионы раз в секунду, таким образом, вы можете быть уверены, что

Пример void loop()

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

Резюме

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

Источник

Структура программы на языке C++ для Arduino

Рассмотрим пример минимально возможной программы на C++ для Arduino, которая ничего не делает:

Разберёмся что здесь написано и почему это обязательно: почему нельзя обойтись просто пустым файлом.

Из чего состоит программа

Блоки бывают разных видов и какой из них когда будет исполняться зависит от внешних условий. В примере минимальной программы вы можете видеть 2 блока. В этом примере блоки называются определением функции. Функция — это просто блок кода с заданным именем, которым кто-то затем может пользоваться из-вне.

Классика жанра: мигающий светодиод

Давайте теперь дополним нашу программу так, чтобы происходило хоть что-то. На Arduino, к 13-му пину подключён светодиод. Им можно управлять, чем мы и займёмся.

Скомпилируйте, загрузите программу. Вы увидите, что каждую секунду светодиод на плате помигивает. Разберёмся почему этот код приводит к ежесекундному миганию.

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

Если пронумеровать выражения по порядку, как они исполняются, получится:

Результат от этого не изменится ни на йоту: после компиляции вы получите абсолютно эквивалентный бинарный файл.

Что делают выражения

Теперь давайте попробуем понять почему написанная программа приводит в итоге к миганию светодиода.

Как известно, пины Arduino могут работать и как выходы и как входы. Когда мы хотим чем-то управлять, то есть выдавать сигнал, нам нужно перевести управляющий пин в состояние работы на выход. В нашем примере мы управляем светодиодом на 13-м пине, поэтому 13-й пин перед использованием нужно сделать выходом.

Это делается выражением в функции setup :

Уточняющие значения, такие как 13 и OUTPUT называются аргументами функции. Совершенно не обязательно, что у всех функций должно быть по 2 аргумента. Сколько у функции аргументов зависит от сути функции, от того как её написал автор. Могут быть функции с одним аргументом, тремя, двадцатью; функции могут быть без аргументов вовсе. Тогда для их вызова круглые скобка открывается и тут же закрывается:

На самом деле, вы могли заметить, наши функции setup и loop также не принимают никакие аргументы. И загадочное «нечто» точно так же вызывает их с пустыми скобками в нужный момент.

Вернёмся к нашему коду. Итак, поскольку мы планируем вечно мигать светодиодом, управляющий пин должен один раз быть сделан выходом и затем мы не хотим вспоминать об этом. Для этого идеологически и предназначена функция setup : настроить плату как нужно, чтобы затем с ней работать.

Перейдём к функции loop :

Как только сон окончен, функция loop завершается. По факту завершения «нечто» тут же вызывает её ещё раз и всё происходит снова: светодиод поджигается, горит, гаснет, ждёт и т.д.

Если перевести написанное на русский, получится следующий алгоритм:

Источник

Основы Arduino IDE

В статье разберём, что такое Arduino IDE, установим ее и напишем первый шаблон для программы на Arduino Wiring (C++).

Что такое Arduino?

Arduino — это компания, которая разрабатывает аппараты и программы для робототехники и не только. Фактически компания зародилась в 2003 году, когда Эрнандо Барраган в рамках учебной работы создал первую версию платформы Arduino Wiring.

Wiring является библиотекой языка программирования С/С++. Это «расширение» предназначено для работы с платами Arduino. Для передачи кода нашей плате используется среда разработки Arduino IDE. В ней и происходит написание программы.

Установка Arduino IDE

Для использования среды Arduino IDE можно установить программу на свой компьютер или использовать онлайн-версию программы (необходима регистрация). Разберем, как установить программу на Windows 8/10.

3. Нас отправляют на сайт Microsoft Store, где нажимаем «Получить».

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуино

Программа установлена и готова к работе.

Горячие клавиши Arduino IDE

Для упрощения работы в Arduino IDE используются «горячие клавиши» или хоткеи, от английского hotkeys, что в переводе и означает «горячие клавиши». Это комбинации клавиш на клавиатуре, которые выполняют различные действия в операционной системе и программах. Все команды доступны через меню «Файл», но через хоткеи работать гораздо быстрее.

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуино

Разберем горячие клавиши и их назначение.

Правка

Ctrl+Zотмена одной операции
Ctrl+Yвозврат одной отмененной операции
Ctrl+Fпоиск по коду
Atrl+Aвыделение всего кода
Ctrl+Pпечать содержимого вкладки
Ctrl+Xвырезать выделенный код
Ctrl+Cкопировать выделенный код
Ctrl+Vвставить выделенный код

Компиляция и загрузка

Ctrl+Rкомпиляция скетча
Ctrl+Uзагрузить скетч
Ctrl+Shift+Uзагрузить скетч с помощью программатора

Сохранение и работа с вкладками

Ctrl+Sсохранить текущий скетч
Ctrl+Shift+Sсохранить текущий скетч с выбором имени сохраняемого файла
Ctrl+Wзакрыть текущую вкладку
Ctrl+Shift+Nновая вкладка
Ctrl+Alt+Стрелка вправопереключение на вкладку справа от активной
Ctrl+Alt+Стрелка влевопереключение на вкладку слева от активной

Другое

Ctrl+Nоткрыть новое окно редактора
Ctrl+Oоткрыть существующий файл скетча
Ctrl+Слэш ( / или русская точка)закомментирование строки
Ctrl+Kоткрыть папку со скетчами
Ctrl+Tавтоформатирование кода
Ctrl+Shift+Mмонитор порта
Ctrl+, (русская буква Б)страница настроек Arduino IDE.

Шаблон программы. Функции setup() и loop()

Комментарии

В начале программы принято указывать некоторые комментарии. Здесь автор кода может написать о себе, о программе и ее назначении. Для обозначения комментария в начале строки пишем 2 символа «//», например:

Шаблон программы

Сама по себе программа напоминает дом. Наш «дом» состоит из 2х частей:

Запустим Arduino IDE и напишем шаблон программы:

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

Если вы все написали правильно, то ваша функция станет другого цвета.

Разберем подробнее назначение каждой функции.

Функция setup()

Функция setup() — это подготовка. Это первая функция, выполняемая программой. Она выполняется только один раз сразу после включения платы или ее перезапуска кнопкой reset. setup() используется чтобы завести новые функции, настроить ПИНы платы, создать переменные. Функция должна быть включена в программу, даже если в ней нет никакого содержания.

Функция loop()

После функции setup() управление переходит к функции loop(). В переводе с английского loop — это петля. Функция делает в точности то, что означает её имя — непрерывно выполняется заново. Она позволяет программе что-то изменять, возвращать данные и управлять платой Arduino.

Источник

Функции

Что такое void setup в ардуино. Смотреть фото Что такое void setup в ардуино. Смотреть картинку Что такое void setup в ардуино. Картинка про Что такое void setup в ардуино. Фото Что такое void setup в ардуино

Функция – часть программы, имеющая своё название и выполняющая заданную задачу. Большая программа может строиться из нескольких функций, каждая из которых выполняет свою задачу. Использование функций очень сильно упрощает написание и чтение кода, и в большинстве случаев делает его оптимальным по объёму занимаемой памяти. Функция должна быть описана, и после этого может вызываться. Функция должна быть описана вне других функций! В общем виде функция имеет следующую структуру, т.е. описание функции:

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

Если параметры не передаются, нужно указать пустые скобки в любом случае!

Функция может принимать параметры, может не принимать, может возвращать какое-то значение, может не возвращать. Давайте рассмотрим эти варианты.

Функция, которая ничего не принимает и ничего не возвращает

Функция, которая ничего не принимает и возвращает результат

Ну вот, функция стала чуть более универсальной. Теперь результат сложения a и b как функцию можно использовать в других местах и приравнивать к другим переменным. Чтобы сделать код ещё более универсальным, давайте передавать величины для сложения в виде параметров

Функция, которая принимает параметры и возвращает результат

Что касается параметров, то они перечисляются в скобках через запятую с указанием типа данных. При вызове функции указанные параметры превращаются в локальные переменные, с которыми можно работать внутри функции. При вызове функции эти переменные получают значения, которые мы указываем при вызове. Смотрим:

Перегруженные функции

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

Типы данных

Далее например при вызове Serial.println(toStr(10, 3.14)) увидим в мониторе порта 10, 3.14

Как вернуть несколько значений? (New)

В языке C++, в отличие от того же Питона, нельзя просто так взять и вернуть из функции два значения. К слову, принять их тоже нельзя, такого механизма в языке нет. Но есть структуры! Функция может принять структуру, вернуть структуру, а мы можем присвоить структуру. Давайте сделаем функцию, которая принимает два числа, находит их сумму, разность и произведение и возвращает результат. Для начала опишем структуру:

Она хранит сумму, разность и произведение. Теперь сделаем функцию, которая принимает два числа, считает, забивает результат в структуру и возвращает тип данных MyStruct

Готово! Пользоваться этим можно так:

Описание и реализация

Хорошим тоном считается объявлять функции отдельно от реализации. Что это значит: в начале документа, или в отдельном файле, мы описываем функцию (это будет называться прототип функции), а в другом месте пишем реализацию. Так делают в серьёзных программных проектах, Ардуино-библиотеки – не исключение. Также такое написание позволяет слегка ускорить компиляцию кода, потому что компилятор уже знает, что он в нём найдёт. Алгоритм такой: Описание (прототип) функции

Реализация функции

То бишь всё то же самое, но с телом функции и фигурными скобками. Пример:

Примечание: хоть компилятор и позволяет вызывать функцию до её объявления (по порядку написания кода), иногда он может не найти функцию и выведет ошибку “функция не объявлена”. В этом случае достаточно сделать прототип функции и расположить его поближе к началу документа, да и вообще все используемые функции можно сделать в виде прототипов и вынести в начало кода, вместе с глобальными переменными!

Передача массива в функцию (Pro)

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

Другие типы функций (Pro)

Шаблонные функции

Шаблон – ещё один мощный инструмент языка C++, позволяющий создавать алгоритмы без привязки к типам данных. Тема очень обширная, мы рассмотрим её только применительно к “универсальным” функциям, полностью про шаблоны можно почитать тут, и тут продолжение. Итак, шаблонные функции. В примере выше мы использовали перегруженные функции для создания функций с одинаковым именем, но разным типом передаваемых параметров. При помощи шаблонов можно сделать одну функцию, которая будет работать для всех типов данных! Компилятор сам выберет, какие типы данных подставить в функцию на этапе компиляции. Синтаксис выглядит так:

Описание функции можно раскрыть:

Сделаем функцию, которая возвращает квадрат числа любого типа

Можно передать в шаблон больше данных! Вот пример функции, которая перемножает два числа любого типа и возвращает результат:

В некоторых ситуациях шаблоны могут быть очень удобны! Также при вызове шаблонной функции можно вручную передать тип данных:

Макро-функции

Зачем это нужно? Обычная функцию с именем, как разбиралось выше, имеет свой “адрес” в памяти, и при каждом вызове функции ядро обращается к ней по этому адресу, что занимает какое-то время. Макро функция же “встраивается” в код программы и выполняется сразу же. В то же время, если макро-функция вызывается в нескольких местах программы, она займёт больше места, чем отдельная обычная функция, т.к. все вызовы будут заменены на код. Делать макросы имеет смысл на простые функции (как в примере ниже), на редко вызываемые функции, и в тех местах, где важно максимальное быстродействие, т.е. важен каждый такт процессора. Например в вычислительных функциях.

В “языке” Arduino есть несколько готовых инструментов, которые кажутся функциями, но на самом деле являются макро. Заглянем в Arduino.h и увидим следующее:

Вот так вот, всем нам знакомые функции оказались макросами! А ещё можно “переносить строку” для создания макро-функций с большим количеством текста, перенос делается при помощи обратного слэша – \

Обратите внимание, на последней строке перенос уже не нужен! Таким образом, во время работы препроцессора все вызовы “функции” printWords() будут заменены на указанные строки кода. Можно аргументы таким же образом передавать:

Как вы можете видеть, объявлять большую макро-функцию неудобно, и тут на помощь приходят встроенные функции.

Встроенные функции

Всё! Теперь вызовы incr будут заменены на код. Если нужно разделить описание и реализацию, то можно записать так:

Статические функции

Указатель на функцию (Pro)

Видео

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *