Void loop в ардуино что это
Функции void loop и void setup Ардуино
Функции void loop () и void setup () в Aduino IDE — это первое с чем сталкивается любой, кто начинает знакомство с языком программирования микроконтроллеров Ардуино. Разберем для чего нужны в скетче данные функции, что следует размещать внутри циклов. Данные правила относятся ко всем платам — от Arduino UNO до Arduino MEGA и перед изучением языка Aduino IDE, следует подробно изучить данные функции.
Процедуры void loop и void setup
Данные циклы должны быть в каждом скетче и вызываться только один раз, даже если один из циклов не используется. Дело в том, что при запуске микроконтроллера Arduino, начинают работать встроенные микропрограммы, которые первым делом проверяют не началась загрузка новой программы с компьютера. Если пользователь не начал прошивку, то контроллер начинает выполнять ранее загруженный скетч.
Использовать два раза 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 вызывается один раз и ее используют для назначения режима работы пинов или команд, которые необходимо выполнить только в момент загрузки программы.
Пример использования основных процедур в 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
Когда мы подключаем плату 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 loop – это главная функция, точка входа в нашу программу. Arduino повторяет вызов этой функции миллионы раз в секунду, таким образом, вы можете быть уверены, что
Пример void loop()
Так хорошо знакомый пример скетча проекта Blink (маячок). Если бы не функция delay(), мы бы никогда не заметили выключение светодиода, т.к. дойдя до конца, скетч начнет выполняться с первой строчки, в которой он сразу же включится.
Резюме
С помощью функций arduino void loop и void setup мы передаем микроконтроллеру инструкции нашего скетча. Все то, что содержится внутри блока setup выполнится один раз. Содержимое блока loop будет выполняться в цикле до тех пор, пока останется включенным Arduino-контроллер.
Инструкция по программированию Arduino
Конечно же, это функции setup () и loop () и они нам уже знакомы.
Функция loop () начинает выполняться после завершения функции setup (), данная функция тоже ничего не возвращает и выполняется по кругу бесконечное количество раз.
И loop (), и setup () являются необходимым минимумом программы. Эти функции должны всегда присутствовать, иначе компилятор выдаст ошибку. Как правило, в setup () происходит инициализация объектов. А в loop () выполняется основная программа и вызываются другие функции.
Конечно же, когда речь идет о программировании, то приходится использовать данные разного типа. Типов достаточно много, но мы разберем лишь некоторые из них.
— String – строковый тип. В переменную такого типа можно записать строку или массив символов.
Переменная – это имя, закреплённое за выделенной областью памяти. Переменная позволяет опустить потребность контроля, за расположением принадлежащей ей ячейки памяти. Достаточно записать значение в переменную, и значение попадет в выделенную для этого область памяти. При этом, пока существует переменная, присвоенное ей значение будет оставаться в целостности и не будет случайно стерто.
Как мы уже могли понять, переменные могут быть разных типов и содержать в себе разные данные. Мало того, очень важно то, в каком месте объявлена переменная, так как объявление работает лишь в рамках тела, обособленного фигурными скобками. Как только тело заканчивается, переменная перестает существовать. В следующем примере при каждом повторе функции loop (), в начале работы, переменная инициализируется и ей присваивается значение, а в момент завершения, переменная перестает существовать.
С этим нужно быть аккуратным, так как на инициализацию переменной тратится немного вычислительного ресурса микроконтроллера.
Теперь хочу еще раз обратить ваше внимание на то, что если мы объявим переменную в теле одной функции, и при этом попытаемся использовать в теле другой функции, то программа не сможет ее увидеть. Хорошо, что ошибка вылезет еще на этапе компиляции.
Но при этом, если в теле функции, где объявлена переменная, есть еще какое-то тело, например, условие, то все будет отлично работать.
С одним из арифметических операторов Arduino вы уже знакомы – это оператор присваивания «=». Но есть и другие, их немного и смысл, думаю, будет понятен и без объяснений.
— «%» = остаток от деления.
Но, не смотря на всю простоту, я приведу пример.
И снова мы возвращаемся к этому, только теперь мы уже вооружены некоторыми знаниями и готовы писать свои функции для Ардуино. Да, помимо стандартных setup () и loop () мы можем создавать свои, совершенно любого назначения. Помните, я говорил, что перед названием функции мы пишем « void » именно потому что она ничего не возвращает? Так вот, функция – это отдельно стоящий блок программы, который мы можем вызвать в любой момент. Мы имеем возможность передать функции какие-то значения, чтобы использовать их в теле функции. Также мы можем распорядиться таким образом, чтобы функция вернула значение нам, к примеру, результат расчета. И « void » — это еще один тип данных, использующийся только в купе с функциями. Если перед названием функции стоит « void » — это значит, что функция ничего не возвращает, она делает свои операции и просто заканчивает работу. Функции при программировании Arduino используют, как правило, в тех случаях, когда одно и то же действие необходимо повторять из разных частей программы и с разными значениями. Не понятно? Не страшно, сейчас разберем все подробно.
Создать функцию в Arduino очень просто, ее даже не нужно объявлять, достаточно только записать. Давайте создадим функцию с названием « myFun ». Эта функция ничего не принимает, ничего не возвращает и даже ничего не выполняет. Пока что она просто есть.
Arduino — основы программирования
После ознакомления с основными элементами Arduino, а также написания программы «Hello World!» пришло время для знакомства с языком программирования.
Структура языка основана главным образом на C/C++, поэтому те, кто ранее программировал на этом языке, не будут испытывать затруднений при освоении программирования Arduino. Остальные должны освоить основную информацию о командах управления, типах данных и функциях.
Большая часть информации, содержащейся здесь, будет совместима с любым курсом C/C++, с учетом различий в типах данных, а также несколько конкретных инструкций, касающихся программирования портов ввода/вывода.
Внимание: Рекомендуется ознакомиться (хотя бы бегло) с курсом C++, а именно с системой счисления, алгоритмами, записи кода…
Основы основ
Несколько формальных вещей, то есть таких, о которых все знают, но иногда забывают…
В Arduino IDE, как в C/C++, необходимо помнить о регистрах символов. Ключевые слова, такие как if, for всегда записываются в нижнем регистре. Каждая инструкция заканчивается на «;». Точка с запятой сообщает компилятору, какую часть интерпретировать как инструкцию.
Скобки <..>используются для обозначения программных блоков. Мы используем их для ограничения тела функции (см. ниже), циклов и условных операторов.
Хорошей практикой является добавление комментариев к содержимому программы, это помогает легко понять код. Однострочные комментарии начинаются с // (двойная косая черта). Многострочные комментарии начинаются с /* и заканчиваются на */
Если мы хотим подключить в нашу программу какую-либо библиотеку, мы используем команду include. Вот примеры подключения библиотек:
Функции в Arduino
Функция (подпрограмма) является отдельной частью программы, выполняющая некоторые операции. Функции используются для упрощения основной программы и улучшения читаемости кода. Полезно использовать функции, поскольку мы можем легко использовать их во многих своих проектах.
Стандартный курс программирования содержит информацию о функциях, которые приведем в следующих статьях. В случае с Arduino функции будут обсуждаться в начале, потому что даже простейшая программа должна иметь две специальные функции. Это уже упоминалось в предыдущих статьях, но здесь мы систематизируем эту информацию.
Объявление функции
Схема объявления функции выглядит следующим образом:
тип — это имя любого доступного типа данных на данном языке программирования. Список типов, доступных при программировании Arduino приведем в отдельной статье.
После исполнения, функция вернет значение объявленного типа. В случае, если функция не принимает никакого возвращаемого значения, то тип данных будет «void».
имя_функции позволяет ее однозначно идентифицировать. Для того чтобы вызвать (запустить) функцию, мы даем ей имя.
параметр — параметр вызова функции. Параметры не обязательны, но зачастую они бывают полезны. Если мы напишем функцию, у которой нет аргументов, мы оставляем круглые скобки пустыми.
Внутри скобок «<…>» содержится собственно тело функции или инструкция, которые мы хотим выполнить. Описание конкретных инструкций укажем в отдельной статье.
Все функции, возвращающие значение, заканчиваются оператором return, за которым следует возвращаемое значение. Только функции, объявленные нулевым указателем («void»), не содержат оператор return. Необходимо знать, что оператор return завершает выполнение функции независимо от местоположения.
Ниже приведены некоторые примеры деклараций функций.
Как вы можете видеть на примерах, объявление функции может принимать различные формы в зависимости от ваших потребностей.
Настоятельно рекомендуем вам изучить и применять функции при написании собственных программ. Со временем, у каждого программиста набирается собственная библиотека функций «на все случаи жизни», которая позволяет облегчить и ускорить процесс написания новых программ.
Теперь, когда мы знаем, как можно написать свою собственную функцию, необходимо научиться ее использовать.
Вызов функции
Все функции мы записываем в один файл/программу. Существует конечно более элегантное решение, но мы постараемся описать его в следующий раз.
Объявив функцию, мы можем использовать ее в других функциях с соответствующим именем и любыми требуемыми параметрами. Ниже приведены примеры вызова функций, которые мы привели выше:
Как вы можете видеть в примерах, вызов функции выполняется путем указания его имени и требуемого количества параметров. Важно всегда вызывать функцию в соответствии с ее объявлением.
Если функция f1() объявлена без параметров, то при ее вызове нельзя указывать никакие параметры, т.е. вызов функции f1(0) будет неверным.
Функция plus(int a, int b) требует ровно двух параметров, поэтому вызов с одним или тремя параметрами невозможно.
Вызов y=plus(1,5) приведет к выполнению функции «plus» с параметрами «1» и «5» и сохранить возвращаемое значение в переменную «y».
Функции setup() и loop().
Обладая знаниями об объявлении и вызове функций, мы можем перейти к системным функциям Arduino: setup() и loop(). Arduino IDE в обязательном порядке необходимо объявлять эти две функции.
setup () — это функция, которая вызывается автоматически при включении питания или нажатии кнопки RESET.
В соответствии с ее именем она используется для установки начальных значений переменных, деклараций входов и выходов системы, которые обычно задаются в начальных параметрах. Благодаря своей специфике эта функция не возвращает значения и не вызывается с параметрами. Правильная декларация функции setup() представлена ниже:
loop () — это функция, которая вызывается в бесконечном цикле. Данная функция также не возвращает значения и не вызывается с параметрами. Ниже показано правильное объявление функции loop():
Как вы видите, объявление функции loop () идентично объявлению функции setup (). Различие состоит в выполнении этих функций микроконтроллером.
Теперь мы проанализируем следующий псевдокод:
В функции setup () есть две инструкции: первая включает светодиод led1, подключенный к плате (например, контакт 13), а вторая выключает светодиод led1.
Функция loop () имеет идентичные инструкции для включения и выключения светодиода led2, подключенного к плате (например, контакт 12).
В результате запуска программы светодиод led1 мигнет один раз, в то время как led2 будет загораться и гаснуть до тех пор, пока включено питание Arduino.
Нажатие кнопки RESET приведет к тому, что led1 снова мигнет один раз, а led2 снова начнет постоянно мигать.
Ардуино язык программирования: основные понятия
Язык программирования Ардуино основывается на языке C/C++, который широко распространен в мире программирования.
Целевой аудиторией Ардуино являются непрофессиональные пользователи в сфере роботостроения и простейших систем автоматики. Основной продукцией является набор плат, комбинируя которые, возможно создавать различные устройства, способные выполнять широкий ряд задач.
В качестве примера, из набора плат, выпускаемых данной фирмой, можно собрать автоматическую кормушку для своих домашних животных. И это лишь один из наиболее простых примеров. Сфера их возможного применения ограничивается лишь фантазией пользователей.
Кроме печатных плат, выпускаемых под торговой маркой Arduino, у них имеется собственный язык программирования Ардуино, который основывается на широко известном в кругу программистов языке C/C++. Давайте более подробно разберемся, что он из себя представляет.
Язык программирования
Язык программирования Ардуино довольно прост в освоении, так как основной целевой аудиторией его применения являются любители. Однако считается одним из самых лучших языков для программирования микроконтроллеров.
Arduino IDE является бесплатной программой, скачать которую может любой желающий. На нашем сайте вы можете скачать любую подходящую для вас версию среды. Также доступ к скачиванию IDE предоставлен на официальном сайте компании, а при желании, разработчиков можно отблагодарить, сделав денежный перевод.
Среда IDE поддерживается такими операционными системами, как Windows, MacOs и Linux. На официальном сайте компании указанно, что данный язык программирования написан на Wiring, но на самом деле его не существует и для написания используется C++ с небольшими изменениями.
Что необходимо для начала работы с Arduino IDE?
Для начала нам потребуются следующие вещи:
Имея этот набор, можно начинать экспериментировать с имеющимися у вас платами, записывая на них ваши первые скетчи.
Как настроить Ардуино на компьютере?
Делается это просто. Необходимо выполнить следующие действия:
Знакомство с интерфейсом Ардуино
Одним из основных элементов ардуино является главное меню программы, которое позволяет получить доступ ко всем доступным функциям нашей программы.
Ниже расположена панель с иконками, которые отображают наиболее используемые функции Arduino IDE:
Следующим по важности элементом является вкладка с файлами проекта. Если это простой скетч, то файл будет всего один. Однако сложные скетчи могут состоять из нескольких файлов. В таком случае на панели вкладок можно быстро переключить просмотр с одного файла на другой. Это очень удобно.
Самым большим из блоков является поле редактора наших скетчей. Тут мы можем просмотреть и, при необходимости, отредактировать нужный нам программный код. Отдельно реализовано поле для вывода системных сообщений. С его помощью можно убедиться, что сохранение вашего скетча или его загрузка были проведены успешно, и вы можете приступать к следующим действиям. Также в программе существует окно, отображающее наличие в ходе компиляции вашего скетча.
Основные функции языка программирования
Давайте наконец-то перейдем к самым основным функция языка программирования Ардуино.
Сразу скажем, что все функции вы можете найти в нашем удобном справочнике на нашем сайте.
Точка с запятой ;
Точка с запятой должна следовать за каждым выражением, написанным на языке программирования Arduino. Например:
В этом выражении мы присваиваем значение переменной и обратите внимание на точку с запятой в конце. Это говорит компилятору, что вы закончили кусок кода и переходите к следующему фрагменту. Точка с запятой в коде Ардуино отделяет одно полное выражение от другого.
Двойная обратная косая черта для однострочных комментариев //
Теперь, даже через 3 месяца когда я просматриваю эту программу я знаю о том куда подключался светодиод.
Компилятор будет игнорировать комментарии, поэтому вы можете писать все, что вам нравится. Если вам нужно много текста для комментария вы можете использовать многострочный комментарий, показанный ниже:
Комментарии похожи на сноски кода, но более распространены, чем те что ставят в книгах внизу страниц.
Фигурные скобки
Фигурные скобки используются для того, чтобы добавить инструкции, выполняемые функцией (мы обсудим функции дальше). Всегда есть открытая фигурная скобка и закрывающая фигурная скобка. Если вы забудете закрыть фигурную скобку, компилятор выведет код ошибки.
Функции ()
В Ардуино есть определенные функции, которые часто используются в среде Arduino IDE. Когда вы вводите их, имя функции будет оранжевым. Например, функция pinMode() является общей функцией, используемой для обозначения режима вывода Arduino.
Обратите внимание, что слово OUTPUT обычно синего цвета. В языке программирования Ардуино есть определенные ключевые слова, которые часто используются, а синий цвет помогает их идентифицировать. Arduino IDE автоматически превращает их в синий цвет.
Далее мы поговорим о двух функциях, используемых почти в любой программе Arduino.
void setup ( )
Возможно, вам интересно что означает void перед функцией setup(). Void означает, что функция не возвращает информацию.
Давайте рассмотрим пару вещей, которые вы должны знать о setup():
void loop( )
Как и в случае с setup(), функция loop() не возвращает никаких значений, поэтому перед неё предшествует слово void.
Если у вас есть датчик температуры, подключенный к вашему Arduino, например, тогда когда температура достигнет определенного порога вы можете включить вентилятор. Код цикла постоянно проверяет температуру, ожидающую запуска вентилятора. Поэтому, хотя код повторяется снова и снова, не каждая часть кода будет выполняться каждую итерацию цикла.
Существуют ли еще программы, работающие с Ардуино?
Помимо официальной Arduino IDE, существуют программы сторонних разработчиков, которые предлагают свои продукты для работы с микроконтроллерами на базе ардуино.
Аналогичный набор функций нам может предоставить программа, которая называется Processing. Она очень схожа с Arduino IDE, так как обе сделаны на одном движке. Processing имеет обширный набор функций, который мало уступает оригинальной программе. С помощью загружаемой библиотеки Serial пользователь может создать связь между передачей данных, которые передают друг другу плата и Processing.При этом мы можем заставить плату выполнять программы прямо с нашего ПК.
Существует еще одна интересная версия исходной программы. Называется она B4R, и главным ее отличием является использование в качестве основы не языка си, а другой язык программирования – Basic. Данный программный продукт является бесплатным. Для работы с ним существуют хорошие самоучители, в том числе и написанные создателями данного продукта.
Есть и платные варианты Arduino IDE. Одним из таких является программа PROGROMINO. Главным ее достоинством считается возможность автодополнения кода. При составлении программы вам больше не нужно будет искать информацию в справочниках. Программа сама предложит вам возможные варианты использования той или иной процедуры. В ее набор входит еще множество интересных функций, отсутствующих в оригинальной программе и способных облегчить вам работу с платами.
Конкуренты Ардуино
Данный рынок по производству микроконтроллеров для создания различных электронных схем и робототехники имеет много поклонников по всему земному шару. Данная ситуация способствует появлению на рынке не только конкурентов, которые предлагают схожие продукты. Кроме них выпускается значительное количество подделок разного качества. Одни очень тяжело отличить от оригиналов, ведь они имеют идентичное качество, другие обладают очень плохими характеристиками и могут вовсе не работать с оригинальными продуктами.
Существуют даже платы Arduino, которые поддерживают работу микропроцессоров с интерпретаторами JavaScript. Актуальны они, в первую очередь, для тех, кто желает использовать язык Java вместо Си. Ведь он более прост, и позволяет добиваться результатов с повышенной скоростью. Однако данные платы являются более дорогими по отношению к ардуино, что является существенным минусом.
Если вы ищите себе хобби и вам интересно такое направление, как электротехника, вы смело можете выбирать для этого Arduino. Плюсов такое хобби имеет массу. Вы будете развиваться в интеллектуальном плане, так как данное занятие потребует от вас знаний в разных областях.
Помимо развлечений, ваше хобби поможет вам в создании массы полезных изделий, которые вы сможете использовать для облегчения повседневной жизни. С каждым разом вы будете находить все новые и новые способы использования вашего увлечения.
Освоить данное занятие будет не так сложно, благодаря наличию большого количества учебников и самоучителей. В дальнейшем вы найдете множество единомышленников по всему миру, которые поделятся с вами своими знаниями и дадут вам стимул для совершения новых экспериментов!