Не удается открыть источник файл arduino h

Обновлено: 01.07.2024

Я пытаюсь добавить файл cpp в проект arduino, который имеет следующую настройку.

Я посмотрел на это, но у меня нет настройки для sketch/import library (хотя у меня есть sketch/include library , но я не вижу ничего похожего на использование пользовательского расположения папки)

Я тоже посмотрел на это. Но так же, как и выше, этот параметр не существует в моем представлении. (Который я недавно скачал)

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

--Edit 1: добавлен код

--Edit 3: добавлен Serial.begin(9600);

спросил(а) 2019-04-15T10:30:00+03:00 2 года, 7 месяцев назад

Поместите вашу folder в folder libraries которая является подкаталогом вашего каталога SketchBook. Откройте Arduino IDE (если он уже открыт, выйдите из него и откройте снова). Перейдите на Sketch->Include Library . Вы найдете folder разделе " Contributed Libraries ". Выберите folder и все готово.

ответил(а) 2019-04-15T20:42:00+03:00 2 года, 7 месяцев назад

Как правильно включить заголовки C/C++ и исходные файлы в ваш проект Arduino.

Этот ответ был проверен и скомпилирован, чтобы убедиться, что он работает. (Завершено в Linux Ubuntu с IDE Arduino 1.8.7).

У вас 2 проблемы.

1-й: необычный процесс сборки Arduino (описанный здесь) не позволяет включать из .ino директорию вашего проекта, где находится ваш .ino файл для этого проекта.

[ОБНОВЛЕНИЕ: ЭТО ОДИН МОЖЕТ БЫТЬ ТОЛЬКО МОЕЙ ОШИБКОЙ, А НЕ ВАШЕЙ, когда я дублировал ваш код на моем ПК: я случайно использовал foo.c вместо foo.cpp ]
2-е: C++ можно использовать только внутри исходных файлов C++, поэтому вы должны изменить foo.c на foo.cpp , поскольку Serial.println() является вызовом C++ для класса C++ ( Serial 's). ) метод println() .

Это! Теперь закройте Arduino IDE, затем снова откройте его и снова откройте ваш проект, и вы увидите следующие новые вкладки:

enter image description here

Теперь он компилируется просто отлично!

Обучение: как я это выяснил?

Во-первых, включите подробную компиляцию в Arduino IDE: Файл → Настройки → установите флажок "Показывать подробный вывод во время" компиляции "".

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

Как только я исправил структуру папок, но ваши файлы все еще были C, а не файлами C++, я увидел эту ошибку:

Обратите внимание, что файл, который он не смог скомпилировать, был /tmp/arduino_build_233569/sketch/foo.c , и что avr-gcc C avr-gcc (а не компилятор avr-g++ C++) использовался в то время.

Затем я открыл файл /tmp/arduino_build_233569/sketch/foo.c чтобы проверить его и найти в нем что-нибудь необычное.

Затем я использовал Eclipse, чтобы начать отслеживание включений, чтобы увидеть, куда втягивается Serial (мне уже должно было быть ясно, в чем проблема, но я еще не видел ее). Я нашел следующее:

Arduino.h находится в "Arduino/Source/Arduino/hardware/arduino/avr/cores/arduino/Arduino.h". Включает в себя "HardwareSerial.h" . Этот заголовок extern в Serial объект:

ОДНАКО, оглядываясь на Arduino.h вы увидите, что HardwareSerial.h ТОЛЬКО включен, если вы компилируете с C++:

Найдите "Местоположение Sketchbook" в Arduino IDE: Файл → Настройки. Мой, например, это /home/gabriel/dev/Arduino/Sketches .

Теперь перейдите туда и создайте папку "библиотеки". Для меня это теперь будет /home/gabriel/dev/Arduino/Sketches/libraries . Все, что находится внутри этой папки, теперь считается "библиотекой" Arduino и может быть включено. Переместите foo.h [НЕ используйте foo.hh в этом случае] и foo.cpp , вот так:

Теперь закройте и снова откройте Arduino IDE, затем перейдите в Sketch → Include Library → foo, и он автоматически добавит следующую строку для вас:

Причина, по которой вы не можете использовать foo.hh в этом случае, заключается в том, что Arduino ищет файлы .h только тогда, когда вы добавляете свою библиотеку, используя меню таким образом. Это ошибка, насколько я понимаю, и, вероятно, следует сообщить разработчикам Arduino. Не стесняйтесь брать это на себя.

В последних версиях Arduino IDE (включая 1.6.10), если вы хотите включить библиотеки из папки скетча, вам нужно поместить их в подпапку src. Например:

Затем он говорит, что вы можете включить, как это:

Я не пробовал это, но это было бы очень полезно, если это работает. Дайте ему шанс и дайте мне знать, если это работает. Обязательно сообщите нам, какую версию ОС и Arduino IDE вы используете.

Библиотеки в Arduino IDE

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

Как узнать список подключенных библиотек к Arduino IDE

Библиотеки arduino IDE

Вы можете посмотреть полный пример, воспользовавшись самой библиотекой.

Библиотеки arduino IDE

Обязательные файлы в библиотеке

Каждая библиотека должна содержать как минимум 2 файла – это заголовочный файл с расширением .h и файл с исходным кодом с расширением .cpp. В заголовочном файле находятся описание класса, константы и переменные. Во втором файле содержатся коды методов. Помимо двух основных файлов может содержаться текстовый документы keywords.txt и папка examples с кодами примеров использования библиотеки. Файлы h и cpp не обязательно лежат в корне

Где найти нужную библиотеку

Как установить библиотеку. Пошаговая инструкция

Как только библиотека будет загружена на ПК, нужно начать ее установку. Установить библиотеку можно двумя способами – при помощи средств Arduino IDE и вручную.

Подключение при помощи Arduino IDE

Библиотека скачивается в виде zip-архива. Для ее включения этим способом архив не нужно распаковывать. Чтобы установить ее, нужно зайти в меню Скетч – Подключить библиотеку – Добавить .Zip библиотеку.

Библиотеки arduino IDE

Когда откроется окно, нужно выбрать папку «загрузки» в разделе «Этот компьютер». Если же после загрузки библиотеки она была сохранена в другое место, нужно указать его.

Библиотеки arduino IDE

Затем нужно выбрать скачанный файл и нажать «открыть».

Библиотеки arduino IDE

Библиотека будет установлена, и ей можно пользоваться. Для того, чтобы начать пользоваться примерами Файл – примеры, нужно перезагрузить среду разработки Ардуино.

Установка библиотеки вручную из zip-файла

Перед началом установки нужно выйти из Arduino IDE. Скачанный zip-файл с библиотекой нужно распаковать. В результате мы получим папку, в которой будут располагаться файлы библиотеки с расширением .cpp и .h и каталоги. Полученную папку нужно будет поместить в libraries.

Библиотеки ардуино IDE

В ОС Windows папку libraries можно найти по маршруту Мои документы – ардуино – libraries. В Linux это будет папка libraries со скетчами.

В конце нужно перезапустить Arduino IDE, загруженная библиотека будет доступна для включения через Скетч – Подключить библиотеку.

Ошибки при подключении библиотеки Arduino

Ниже перечислен перечень возможных ошибок при установке библиотеки и способы борьбы с ними:

Многие скетчи (программы) работают с библиотеками. Библиотека облегчает работу с определённым модулем или одним из типов модулей. Например, если Вы хотите вывести текст на LCD дисплей без подключения библиотеки, то Вам нужно передать ему несколько байт команд и данных, что займет несколько строк кода, а главное, что Вам нужно знать тип микроконтроллера под управлением которого работает LCD дисплей, назначение команд которыми он управляется, знать архитектуру его памяти, адреса и назначение регистров, для чего потребуется найти и перечитать его datasheet. В то время как при написании кода с использованием библиотеки (например LiquidCrystal_I2C.h) Вы сможете вывести текст на дисплей вызвав всего одну функцию библиотеки: lcd.print("my text");

Скачивание библиотеки:

Если в наших уроках, описаниях или примерах используется библиотека, то мы указываем ссылку на скачивание этой библиотеки. Все наши библиотеки находятся в zip архиве, но не спешите доставать файлы из архива, это может не понадобиться, т.к. Arduino IDE сама может распаковывать архивы и размещать библиотеки в нужных папках (см. дальше).


Если Вы скачали архив библиотеки с сайта не указывая путь для сохранения файла, то скаченный (загруженный) Вами файл скорее всего находится в папке: Этот компьютер > Загрузки.

Установка библиотеки:

После того как Вы скачали (загрузили) библиотеку на свой компьютер, её нужно установить. Установить библиотеку можно вручную или сделать это средствами Arduino IDE:

Установка библиотеки средствами Arduino IDE:

Войдите в меню: Скетч > Подключить библиотеку > Добавить .ZIP библиотеку. .


В появившемся окне нажмите на иконку «Этот компьютер» и выберите папку «Загрузки». Если при скачивании ZIP архива с сайта, Вы указывали путь для сохранения файла, то вместо папки «Загрузки» укажите путь к файлу.


Выберите ZIP файл библиотеки, который Вы скачали. Название файла может не соответствовать названию библиотеки. После чего нажмите на кнопку «Открыть» (Open).


На этом установка библиотеки завершена, можно приступить к её подключению в скетч.

Установка библиотеки вручную:

Распакуйте скаченный Вами ZIP архив и поместите папку (имя папки обычно совпадает с названием библиотеки) из данного архива в папку: Этот компьютер > Документы > Arduino > libraries.


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

Примечание: папка libraries есть не только по указанному выше пути, но и в папке программы Arduino IDE (где находится файл arduino .exe). Скопировав библиотеку в эту папку, она тоже установится, но Мы не рекомендуем это делать. Дело в том, что программа Arduino IDE постоянно развивается и количество её версий постоянно растёт. Если Вы захотите установить новую версию Arduino IDE, то библиотеки находящиеся в папке Этот компьютер > Документы > Arduino > libraries, будут доступны и в старой, и в новой (установленной) версии Arduino IDE, а библиотеки находящиеся в папке libraries программы Arduino IDE старой версии (которая была установлена ранее) будут доступны только в ней (пока Вы их не скопируете в новую).

Подключение библиотеки:

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

Для работы с большинством библиотек, нужно создать объект (экземпляр класса библиотеки), через который будут доступны их функции и методы, например:

Вместо lcd можно написать любое слово или сочетание букв и цифр, это название объекта через который можно обращаться к методам и функциям библиотеки. Если Вместо lcd Вы написали myLCD, то и ко всем методам и функциям библиотеки LiquidCrystal_I2C, нужно обращаться через указанное Вами имя объекта, например: myLCD.print("my text");

Примеры из библиотек:

Большинство библиотек содержат примеры. Это небольшие скетчи (программы) которые раскрывают функционал библиотеки. Наиболее удобный способ просмотра примеров, с помощью средств Arduino IDE. Выберите пункт меню: Файл > Примеры, откроется список с названиями библиотек у которых есть примеры. Наведите курсор на название библиотеки и Вы увидите список примеров содержащихся в ней, клик на примере приведёт к появлению нового окна Arduino IDE со скетчем примера.


Альтернативный способ просмотра примеров заключается в запуске файлов скетчей из папки:
путь > libraries > название библиотеки > examples > название примера.

Поиск библиотек:

Библиотеки можно искать самостоятельно, а можно воспользоваться функционалом Arduino IDE.

Выберите пункт меню: Скетч > Подключить библиотеку > Управлять библиотеками. .


Откроется «Менеджер библиотек», в котором можно найти интересующую Вас библиотеку введя её название в строку поиска, дополнительно можно установить пункты «Тип» и «Тема».


Одна из самых неприятных ошибок - это ошибка компиляции для платы Аrduino Nano, с которой вам придется столкнуться не раз.

Синтаксические ошибки

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

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

Но и здесь не избежать множества проблем, с которыми знаком каждый программист, и одна из самых неприятных – ошибка компиляции для платы Аrduino nano, с которой вам придется столкнуться не раз. Что же эта строчка означает, какие у неё причины появления, и главное – как быстро решить данную проблему?

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

Как несложно догадаться, компиляция – приведение кода на языке Си к виду машинного (двоичного) и преобразование множественных функций в простые операции, чтобы те смогли выполняться через встроенные операнды процессора. Выглядит всё достаточно просто, но сам процесс компиляции происходит значительно сложнее, и поэтому ошибка во время проведения оной может возникать по десяткам причин.


Мы узнали, к чему приводит данный процесс, давайте разберёмся, как он происходит:

  1. Первое, что делает компилятор – подгружает все инклуднутые файлы, а также меняет объявленные дефайны на значения, которое для них указано. Это необходимо затем, чтобы не нужно было по нескольку раз проходиться синтаксическим парсером в пределах одного кода. Также, в зависимости от среды, компилятор может подставлять функции на место их объявления или делать это уже после прохода синтаксическим парсером. В случае с С99, используется второй вариант реализации, но это и не столь важно.
  2. Далее он проверяет первичный синтаксис. Этот процесс проводится в изначальном компилируемом файле, и своеобразный парсер ищет, были ли описаны приведенные функции ранее, подключены ли необходимые библиотеки и прочее. Также проверяется правильность приведения типов данных к определенным значениям. Не стоит забывать, что в С99 используется строгая явная типизация, и вы не можете засунуть в строку, объявленную integer, какие-то буквенные значения. Если такое замечается, сразу вылетает ошибка.
  3. В зависимости от среды разработки, иногда предоставляется возможность последний раз протестировать код, который сейчас будет компилироваться, с запуском интерпретатора соответственно.
  4. Последним идет стек из различных действий приведения функций, базовых операнд и прочего к двоичному коду, что может занять какое-то время. Также вся структура файлов переносится в исполняемые exe-шники, а затем происходит завершение компиляции.

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

А вот синтаксические ошибки – самая частая причина, почему на exit status 1 происходит ошибка компиляции для платы Аrduino nano. Зачастую процесс дебагинга в этом случае предельно простой.


Вам высвечивают ошибку и строчку, а также подсказку от оператора EXCEPTION, что конкретно не понравилось парсеру. Будь то запятая или не закрытые скобки функции, проблема загрузки в плату Аrduino возникнет в любом случае.

Ошибки компиляции плат Arduino uno

Другая частая оплошность пользователя, которая порождает вопросы вроде, что делать, если Аrduino не видит порт, заключается в том, что вы попросту забываете настроить среду разработки. IDE Ардуино создана под все виды плат, но, как мы указывали, на каждом контроллере помещается лишь ограниченное количество библиотек, и их наполнение может быть различным.

Соответственно, если в меню среды вы выбрали компиляцию не под тот МК, то вполне вероятно, что вызываемая вами функция или метод просто не будет найдена в постоянной памяти, вернув ошибку. Стандартно, в настройках указана плата Ардуино уно, поэтому не забывайте её менять. И обратная ситуация может стать причиной, по которой возникает проблема загрузки в плату на Аrduino uno.

Ошибка exit status 1 при компиляции для плат uno, mega и nano

Ошибки библиотек

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

Ошибки компилятора Ардуино

Ранее упоминался финальный стек действий, при прогонке кода через компилятор, и в этот момент могут произойти наиболее страшные ошибки – баги самого IDE. Здесь конкретного решения быть не может. Вам никто не запрещает залезть в ядро системы и проверить там всё самостоятельно, но куда эффективнее будет откатиться до предыдущей версии программы или, наоборот, обновиться.

Основные ошибки

Ошибка: "avrdude: stk500_recv(): programmer is not responding"

Решение:

В Arduino IDE в меню "Сервис" выбираем плату. В меню "Сервис → Последовательный порт" выбираем порт.

Ошибка: "a function-definition is not allowed here before ‘

Забыли в коде программы (скетча) закрыть фигурную скобку >.

Решение:

Обычно в Ардуино IDE строка с ошибкой подсвечивается.

Ошибка: "No such file or directory / exit status 1"

Подключаемая библиотека отсутствует в папке libraries.

Решение:

Ошибка: "expected initializer before ‘>’ token / expected ‘;’ before ‘>’ token"

Забыли открыть фигурную скобку , если видим "initializer before". Ошибка "expected ‘;’ before ‘>’ token" - забыли поставить точку с запятой в конце командной строки.

Решение:

Обычно в Ардуино IDE строка с ошибкой подсвечивается.

Ошибка: ". was not declared in this scope"

Arduino IDE видит в коде выражения или символы, которые не являются служебными или не были объявлены переменными.

Решение:

Проверить код на использование неизвестных выражений или лишних символов.

Читайте также: