Подтвердить что ты не робот

Сохранение всех библиотек в эскизном каталоге Arduino

Я знаю, что вы должны размещать любые внешние библиотеки в папке "library" каталога установки arduino, но у меня есть проект, который использует несколько библиотек, которые я создал для проекта, и в основном для того, чтобы сохранить весь этот код содержащий и выходящий из основного файла pde. Тем не менее, я попытался поместить библиотеки в тот же каталог, что и основной файл PDE, чтобы я мог более легко сохранить все синхронизированное в subversion (я работаю над этим на нескольких компьютерах), и я не хочу продолжать идти назад и синхронизировать библиотеки по отдельности. Кроме того, просто для того, чтобы легко застегивать папку эскиза и знать, что он содержит все, что ему нужно.

Я попытался добавить заголовочные файлы к эскизу в качестве новой вкладки, но это, похоже, не работает вообще... даже не волнует, должны ли они встраивать IDE в arduino.

Я также попытался добавить библиотеки в каталог эскиза в подкаталоги (что бы я хотел), а затем привязать к ним как:

#include "mylib/mylib.h"

и

#include <mylib/mylib.h>

Но оба эти результата приводят к ошибкам, не найденным в файле.

Возможно ли это? И если да, то как включить их в основной файл для построения? Предпочтительно в своих собственных подкаталогах.

4b9b3361

Ответ 1

Для эскизов, которые у меня есть, файлы библиотеки "*.h" и "*.cpp" фактически находятся в той же папке, что и эскиз, и я называю их как "someheader.h". Я также заметил, что если я войду в меню sketch и add file..., что файл не появится, пока я не закрою и не открою эскиз.

Ответ 2

Я согласен с вами; это невыносимый способ разработки программного обеспечения: для этого требуется, чтобы каждый файл находился в том же каталоге, что и основная программа!

Чтобы обойти это, я использую make, чтобы собрать один файл .h из моих источников .h и .cpp - вы можете видеть, что это используется в этот Makefile:

PREPROCESS=gcc -E -C -x c -iquote ./src
# -E : Stop after preprocessing.
# -C : Don't discard comments.
# -x c : Treat the file as C code.
# -iquote ./src : Use ./src for the non-system include path.

TARGETS=sketches/morse/morse.h

all: $(TARGETS)

clean:
    rm $(TARGETS)

%.h: %.h.in
    $(PREPROCESS) $< -o [email protected]

Arduino очень придирчив к окончанию файла - если вы поместите файл .cpp или .cc в свой каталог, он автоматически использует его в источнике, и вы не можете включить ничего, кроме .cpp, .cc или .h - так что это единственный способ сделать это.

Я использую подобный трюк и для компоновки файлов JavaScript здесь.

Это требует, чтобы вы запускали make после редактирования ваших файлов, но поскольку я использую внешний редактор (Emacs) в любом случае, для меня это является нулевой проблемой.

Ответ 3

У меня была такая же проблема. Решил его для Arduino IDE > 1.8. Кажется специальностью в новых IDE (?) Согласно ссылке (см. Нижнюю ссылку).

Перед созданием папки библиотеки вам нужно добавить подкаталог "src". Таким образом, ваш проект должен выглядеть следующим образом:

/SketchDir (with *.ino file)  
/SketchDir/src  
/SketchDir/src/yourLib (with .h and .cpp file)  

и, наконец, в вашем эскизе вы ссылаетесь:

#include "src/yourLib/yourLib.h"  

иначе в моем случае - если мне не хватает папки "src" - я получаю сообщение об ошибке, что он не может найти файл yourLib.cpp.

Примечание. Я использую систему Windows, если она отличается и фактически является VS-кодом в качестве оболочки для Arduino IDE. Но оба IDE составляют эту структуру.

Литература: https://forum.arduino.cc/index.php?topic=445230.0

Ответ 4

У меня была одна и та же проблема (я также хотел бы сохранить код самодостаточным), поэтому я просто напишу несколько заметок; скажем, у меня есть MyPdeSketch.pde с помощью MyLibClass.cpp; то я организовал это как

/path/to/skdir/MyPdeSketch/MyPdeSketch.pde
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h

(В принципе, /path/to/skdir/ здесь эквивалентно ~/sketchbook/)

 

Что сработало для меня, это что-то вроде:

mkdir /path/to/arduino-0022/libraries/MyLibClass
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/

После перезапуска IDE MyLibClass должен отображаться в разделе "Библиотека эскиза/импорта".

Обратите внимание, что единственный способ, которым я могу видеть до сих пор для файла класса библиотеки, ссылаться на другие файлы библиотеки, - это относить их относительно (из "текущего местоположения" ), если они все находятся в одной и той же основной папке arduino-0022/libraries ( возможно связанный с проблемой Stack Overflow: Возможно ли включить библиотеку из другой библиотеки с помощью Arduino IDE?).

В противном случае также можно будет символически привязать каталог MyLibClass непосредственно к arduino-0022/libraries (вместо того, чтобы вручную создавать каталог, а затем символически связывать файлы). По этой же причине символическая привязка к альтернативному местоположению ~/sketchbook/libraries также может быть проблематичной.

Наконец, возможно, лучшей организацией может быть:

/path/to/skdir/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyLibClass/MyLibClass.h
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde

... который после симлинклинга на libraries заставил бы MyPdeSketch показать в примерах библиотеки MyLibClass в среде Arduino IDE (однако это может быть неприменимо, если вы хотите скомпоновать несколько папок класса под одним каталогом).

EDIT: или просто используйте Makefile - который будет работать непосредственно с avr-gcc, минуя IDE Arduino (в этом случае организация файла эскиза может быть несколько ослаблена).

Ответ 5

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

Единственное реальное решение - написать make файл, тогда вы можете использовать реальную среду IDE. Я надеюсь, что однажды кто-нибудь напишет плагин Arduino для QtCreator.

Вот пример makefile:

http://volker.top.geek.nz/arduino/Makefile-Arduino-v1.8

Ответ 6

Думаю, я знаю, что вам нужно.

у вас есть папка проекта: MYPROJ_FOLDER, и вы хотите добавить папку Библиотеки, которая содержит больше папок для ваших пользовательских библиотек.

вам нужно сделать следующее: 1- создайте папки следующим образом:

-MyProjFolder
-MyProjFolder/MyProjFolder        

а затем создайте файл с именем папки в расширении .ino   -MyProjFolder/MyProjFolder/MyProjFolder.ino

2- создать папку с библиотекой:   -MyProjFolder/libraries < < < имя не является опцией, должно быть названо так.

3- затем создайте свои собственные библиотеки   -MyProjFolder/библиотеки/ lib1  -MyProjFolder/библиотеки/lib1/lib1.cpp   -MyProjFolder/libraries/lib1/ примеры < < < это папка   -MyProjFolder/libraries/lib1/examples/ example1

повторите шаг 3 столько, сколько хотите

также проверьте http://arduino.cc/en/Guide/Libraries

Ответ 7

Что сработало для меня, так это создать каталог, например, "src" в каталоге эскиза, и под ним каталог для каждой личной библиотеки.

Пример:

У меня есть проект под названием ObstacleRobot, под которым находится папка для моего эскиза, называемая препятствие (автоматически созданное IDE) и там мой эскиз "препятствиеRobot.ino"

До сих пор мы имеем:

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino

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

В конце концов я работал у меня:

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino
       /src
          /Sonar
             Sonar.h
             Sonar.cpp

Тогда то, что вы должны сделать в основном эскизе, - это записать include следующим образом:

#include "src/Sonar/Sonar.h"

И все.

Ответ 8

Следуя строкам Hefny, сделайте ваш проект примером для вашей библиотеки.

Например (Unix env), скажем, библиотеки находятся в ~ arduino/libraries

Создайте свой проект ~ arduino/libraries/MyProject, ваши библиотеки идут туда (например, ~/arduino/libraries/MyProject/module1.h ~/arduino/libraries/MyProject/module1.cpp ~/arduino/libraries/MyProject/module2.h ~/arduino/libraries/MyProject/module2.cpp

Сейчас:    mkdir -p ~ arduino/libraries/MyProject/examples/myproj

edit ~ arduino/libraries/MyProject/examples/myproj/myproj.ino(обратите внимание, что это не примеры /myproj.ino, но примеры /myproj/myproj.ino)

Перезагрузите среду IDE, вы должны найти свой проект в меню File/Example/MyProject.

Также обратите внимание, что вы включаете include С#include

Ответ 9

Почему мы не пишем script с помощью одной команды копирования, копируя наши библиотеки, где бы наша библиотека не находилась в папке библиотеки IDE arduino?

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

Что-то вроде этого работает для меня:

cp -r mylibs/* ~/Documents/programs/arduino-1.5.8/libraries/.

Обратите внимание, что пути относятся к моей собственной структуре файлов.

Надеюсь, это поможет кому-то. Это включает в себя мое будущее, которое, я уверен, будет читать это в ближайшем будущем... как обычно!

J