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

Начав выполнение программы, 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
Синтаксические ошибки
Первые ошибки, которые определяются отладчиком – это синтаксические ошибки. Их же легче всего исправить. Неправильный синтаксис в Arduino IDE выделяется строкой, в которой допущена неточность. Нужно разобраться – это ошибка в написании служебного слова, случайно удалена важная функция, не хватает закрывающейся скобки или неправильно отделены комментарии.
Для определения ошибки внимательно просмотрите строку-подсказку и внесите необходимые изменения. Ниже мы приведем примеры наиболее часто встречающихся синтаксических ошибок компиляции кода:
Ошибки библиотек
Большое количество ошибок возникает на уровне подключения библиотек или неправильного их функционирования. Наиболее известные:
Ошибки компилятора
Нестабильность в работе самого компилятора тоже могут возникать при отладке программы. Вариантов выхода из данной ситуации может быть несколько, например, установить последнюю версию компилятора. Иногда решением может быть наоборот, возвращение до более старой версии. Тогда используемая библиотека может работать корректно.
В Arduino можно писать программы под разные варианты микроконтроллеров. По умолчанию в меню выбрана плата Arduino/Genuino Uno. Если забудете о том что нужно указать нужную плату – в вашем коде будут ссылки на методы или переменные, не описанные в конфигурации “по умолчанию”.
Вы получите ошибку при компиляции “programmer is not responding”. Чтобы исправить ее – проверьте правильность написания кода в части выбора портов и вида платы. Для этого в Ардуино IDE в меню «Сервис» выберите плату. Аналогично укажите порт в меню “Сервис” – пункт «Последовательный порт».
Ошибка exit status 1
В среде разработки такое сообщение можно увидеть во многих случаях. И хотя в документации данная ошибка указывается как причина невозможности запуска IDE Аrduino в нужной конфигурации, на самом деле причины могут быть и другие. Для того, чтобы найти место, где скрывается эта ошибка можно “перелопатить” действительно много. Но все же стоит сначала проверить разрядность системы и доступные библиотеки.
Arduino.ru
ошибка
1\AppData\Local\Temp\untitled706967174.tmp\sketch_jun19a\F83CAKKIKFRUNNW (1).ino: In function ‘void setup()’:
1\AppData\Local\Temp\untitled706967174.tmp\sketch_jun19a\sketch_jun19a.ino:1:6: note: ‘void setup()’ previously defined here
1\AppData\Local\Temp\untitled706967174.tmp\sketch_jun19a\F83CAKKIKFRUNNW (1).ino: In function ‘void loop()’:
1\AppData\Local\Temp\untitled706967174.tmp\sketch_jun19a\sketch_jun19a.ino:6:6: note: ‘void loop()’ previously defined here
1. Вы не выложили код
Более подробных ответов не будет, т.к. не кода. И кстати, здесь есть правила выкладывания кода. Потрудитесь их найти и соблюдать. Код не по правилам обычно никто не читает.
1. Вы не выложили код
Более подробных ответов не будет, т.к. не кода. И кстати, здесь есть правила выкладывания кода. Потрудитесь их найти и соблюдать. Код не по правилам обычно никто не читает.
Для альтернативно-одарённых повторяю:
Код не читал, по вышеназванной причине.
Для альтернативно-одарённых повторяю:
Код не читал, по вышеназванной причине.
Для альтернативно-одарённых повторяю:
Код не читал, по вышеназванной причине.
Евгений, обратите внимание на ник ТСа, и я уж Вас прошу, будьте толерантнее.
Для альтернативно-одарённых повторяю:
Код не читал, по вышеназванной причине.
Евгений, обратите внимание на ник ТСа, и я уж Вас прошу, будьте толерантнее.
Вместо того, чтобы писать что-то про мой ник, можно было бы помочь мне с моей проблемой или хотябы дать ссылку на правила пользования форумом, чтоб помог кто-то другой
pidor, у Вас несколько скетчей в одной папке не лежат? Сам по себе выложенный код вполне себе компилируется.
pidor, у Вас несколько скетчей в одной папке не лежат? Сам по себе выложенный код вполне себе компилируется.
Среда всё это считает одним проектом и пытается скомпилировать. А в тех скетчах свои лупы и сетапы, вот и пишет, что повторное переопределение. Каждому скетчу свою папку!
Среда всё это считает одним проектом и пытается скомпилировать. А в тех скетчах свои лупы и сетапы, вот и пишет, что повторное переопределение. Каждому скетчу свою папку!
я убрал и нечего не изменилось, вопрос тогда такой нада ли эту папку со скетчем помещать в папку с самим ардуино иде, там в библиотеку, или от этого не зависит?
Закрой IDE и открой заново после того, как прибрался.
Закрой IDE и открой заново после того, как прибрался.
Нельзя. В моём посте было ключевое слово, которого Вы, похоже, не поняли. Я его оставил здесь, чтобы до Вас таки дошло.
Нельзя. В моём посте было ключевое слово, которого Вы, похоже, не поняли. Я его оставил здесь, чтобы до Вас таки дошло.
Да я Ваш код компилировал. Всё с ним нормально. Из текста ошибки видно, что речь о двух разных скетчах идёт. Покажите, какой текст ошибки теперь, после раскладывания скетчей по папкам.
если не затруднит, можете его скачать и сказать нормально у вас с ним все будет?
коллеги, обязательно проверяем на вирусы.
Да я Ваш код компилировал. Всё с ним нормально. Из текста ошибки видно, что речь о двух разных скетчах идёт. Покажите, какой текст ошибки теперь, после раскладывания скетчей по папкам.
Скачай файл заново в чистую папку, кликни на него, на вопрос о переносе ответь «Да».
Что вы нам голову морочите, вас забанить надо. Шли бы вы отсюда
pidor, вы издеваетесь??
Скачай файл заново в чистую папку, кликни на него, на вопрос о переносе ответь «Да».
Скачай файл заново в чистую папку, кликни на него, на вопрос о переносе ответь «Да».
и все закампелировалось.
Arduino.ru
Не компилируется код из примера.
Хочу скомпилировать код примера но выскакивает ошибка компиляции, подскажите что может быть причиной.
вот сообщения компилятора:
а почему цифровой датчик подключаете к аналоговому пину?
это не я, это так в примере который шел с библиотекой.
датчик DHT11? киньте ссылку на библиотеку.
Недам )), уже разобрался, перезалил библиотеку. Сори за беспокойство.
Блин что то не везет мне на библиотеки, опять код не компилится, причем совершенно пустой, всего лишь подключена библиотека:
Я так понимаю что нехватает еще одной библиотеки? а где ее можно качнуть?
Хочу скомпилировать код примера но выскакивает ошибка компиляции, подскажите что может быть причиной.
Хочу скомпилировать код примера но выскакивает ошибка компиляции, подскажите что может быть причиной.
Хочу чтобы вы все знали! Освежили
Для чего это все?
1. Для того, чтобы другие люди, «прохожие» прочитали решение своей проблемы из уст более просвященных
2. Для того, чтобы другие люди увидели «А как бы сделали профи»
Что нельзя, категорически, тут делать? По соображениям здравого смысла.
3. Умничать. Типа «я тут великий учитель». Это вы тут лохи, не можете догадаться, а это очевидные (для меня) вещи. И рассказывать не путь решения, а путь догадки. Мужик, блин, это форум, а не лекторий в институте, и ты обычный смертный, и не платят тебе за образование. Такие люди должны получать в морду сразу же, как только показались на горизонте. Бах бах.
Как надо писать? Желательно
1. Так, чтобы была хоть какая-то логическая структура. 1. Сделать это; 2. Сделать так-то; 3. Загрузить так-то;
2. А я вот делал вот так вот. Считаю это правильно
3. Проще выполнить вот так.
4. Ну или как-то в доступном ключе
У меня такая же проблема:
Скачивал библиотеку на страничке урока тут
Как я решил свою проблему?
Библиотеки из менеджера библиотек тоже не устанавливат библиотеку DHT by Adafruit. Ошибка скачивания по ссылке http://downloads.arduino.cc/github.com/adafruit.
2. Перезапустил IDE (хотя наверно, можно и без этого)
Разве что показывает влажность 740%, температуру 640’С. Но это уже другая история
Хочу чтобы вы все знали! Освежили
1. Нет. Для это изобрели Гугль.
2. Нет, это тоже происходит в Гугле.
Для чего это все?
1. Для того, чтобы другие люди, «прохожие» прочитали решение своей проблемы из уст более просвященных
2. Для того, чтобы другие люди увидели «А как бы сделали профи»
1. Нет. Люди должны сами искать решение своих проблем.
2. Нет, проблеммы «других» интересуют только их самих.
Что нельзя, категорически, тут делать? По соображениям здравого смысла.
3. Умничать. Типа «я тут великий учитель». Это вы тут лохи, не можете догадаться, а это очевидные (для меня) вещи. И рассказывать не путь решения, а путь догадки. Мужик, блин, это форум, а не лекторий в институте, и ты обычный смертный, и не платят тебе за образование. Такие люди должны получать в морду сразу же, как только показались на горизонте. Бах бах.
1. Нет, часто именно НУЖНО, вместо ответа объяснить спрашивающему, что он должен искать ответ сам, иначе плодим тупых, безответственных инфантилов.
ЕЩЕ РАЗ КАПСОМ, ДЛЯ ТУПЫХ:
Arduino.ru
Ошибка при компилировании (мой первый скетч)
Всем привет Вот решил я связать два скетча в одну. IRremote и Ultrasonic
Немного изучив я всетаки написал код, но вот в компиляции выходит ошибка
Ошибка выходт в строке void loop() // дальномер
Я уже читал п свю пу она заключалась в том что я пытаюсь определить функцию внутри фукции.
Уже не знаю что и делать.
С нетерпением жду ваших советов!
У Вас две функции loop, так нельзя
Думаю инклуда #include вполне достаточно (он сам, по идее должен подключить #include )
Сделал так, компилируется.
К сожалению не работает. Не работает даже Ик управление которое раньше работало, мигает только светодиод TX и отдает COM порту рандомное число. Не знаете почему так?
А еще, вам было-бы неплохо определится чем же именно занимается 11 пин. Ну него приходят сигналы от ИК-приемника или от дальномера? Ну ладно в коде, а при подключении двух устройств к одному пину вас не смутили?
А еще, вам было-бы неплохо определится чем же именно занимается 11 пин. Ну него приходят сигналы от ИК-приемника или от дальномера? Ну ладно в коде, а при подключении двух устройств к одному пину вас не смутили?
Я уже тестировал свой старый код он замечательно работал. » а при подключении двух устройств к одному пину вас не смутили?» а тут просто опечатка! Я конечно же сменил его на 9 пин.
Я уже тестировал свой старый код он замечательно работал.
С delay(50) тестировали?
» а при подключении двух устройств к одному пину вас не смутили?» а тут просто опечатка! Я конечно же сменил его на 9 пин.
Я уже тестировал свой старый код он замечательно работал.
С delay(50) тестировали?
И, кстати, что-то сильно я сомневаюсь что тестировали. Или тестировали одно, сюда выкинули другой код.
Что-то в нем нигде не видно irrecv.resume(); // Receive the next value
Что-то в нем нигде не видно irrecv.resume(); // Receive the next value
Вот только что добавил, заработало. Только вот данные обновляются только через 3 секунды, а если прикоснуться к digital выводам данны обновляются как и прежде очень часто. С чем это связано?
Здравствуйте всем. Может кто поможет. При компиляции скетча вот этого:
Выходят такие ошибки :
Библиотеки вроде бы все есть, но нифига не работает.
Ага, и ногой еще топни или кулаком по столу.
Arduino: 1.8.6 Hourly Build 2018/05/15 10:41 (Windows 7), Плата:»Arduino/Genuino Uno»
sketch_may21a:3:24: error: ‘poluper1’ was not declared in this scope
sketch_may21a:3:24: error: ‘poluper1’ was not declared in this scope
Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? и как то обьявить функцию до ее описания нельзя? или можно и тогда это совет как боротся с симптомами а не решать проблемму.
Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем? и как то обьявить функцию до ее описания нельзя? или можно и тогда это совет как боротся с симптомами а не решать проблемму.
Все тут есть. Предварительные обьявления функций поддерживаются.
Спасибо за оперативный ответ. Пробовал выше поднять void с функциями, ошибки опять пишит, можете написать как правильно строчку эту переписать?
Несовсем уверен, поэтому уточню, в среде ардуинок заголовочных файлов нет от слова совсем?
Но, как показал ответ вопрошающего, на этот раз надежда не оправдалась. Так что предлагаю Вам попробовать объяснить ему что делать, а мы посмотрим :)))))
Но, как показал ответ вопрошающего, на этот раз надежда не оправдалась. Так что предлагаю Вам попробовать объяснить ему что делать, а мы посмотрим :)))))
Так надо тогда определится с направленностью форума =) а то одних «знатоков» зарезают сразу при такого же уровня вопросах, а другим дают решение =)
пы.сы пост номер 22 в этой теме, вот если бы у ТС последовали осмысленные вопросы после этого поста.
1) спросил бы что значит не обьявленныи как это














