2011-01-16 18 views
34

Sé que se supone que debe colocar bibliotecas externas en la carpeta "libraries" del directorio de instalación de arduino, pero tengo un proyecto que usa varias bibliotecas que he creado para el proyecto y principalmente para mantener todo ese código autocontenido y fuera del archivo pde principal. Sin embargo, he tratado de ubicar las bibliotecas en el mismo directorio que el archivo PDE principal para poder mantener más fácilmente todo sincronizado en subversión (trabajo en esto en varias computadoras) y no quiero tener que seguir trabajando de vuelta y sincronizando las bibliotecas por separado. Además, solo por el hecho de poder cerrar fácilmente la carpeta de bocetos y saber que contiene todo lo que necesita.Mantener todas las bibliotecas en el directorio de bocetos Arduino

He intentado agregar los archivos de encabezado al boceto como una nueva pestaña, pero eso no parece funcionar en absoluto ... ni siquiera les importa si deberían estar en el IDE de Arduino.

También he intentado añadir las librerías al directorio boceto en subdirectorios (lo que yo preferiría en gran medida) y luego se une a ellos como:

#include "mylib/mylib.h" 

y

#include <mylib/mylib.h> 

Pero ambos esto da como resultado errores de archivo no encontrado.

¿Esto es posible? Y, si es así, ¿cómo los incluyo en el archivo principal para compilar? Preferiblemente en sus propios subdirectorios.

+0

Solución parcial aquí usando macros: http://arduino.stackexchange.com/a/9575/6697 – jjz

Respuesta

8

Para los bocetos que tengo, los "*.h" y "*.cpp" archivos de la biblioteca en realidad residen en la misma carpeta que el boceto, y yo los llaman como "someheader.h". También noté que si voy al menú sketch y add file..., el archivo no aparece hasta que cierro y vuelvo a abrir el boceto.

+3

Si los tiene en la misma carpeta puede incluirlos como '#include" libName.h "'. Pero parece que tienes que volver a cargar el IDE antes de poder compilar el código. – tbraun89

+1

Gracias tbraun, el truco es recargar el IDE –

3

Acabo de tener este mismo problema (también me gusta mantener el código autocontenido), así que anotaré algunas notas; decir que tengo un MyPdeSketch.pde usando MyLibClass.cpp; entonces tengo que organizados así

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

(En principio, /path/to/skdir/ aquí es equivalente a ~/sketchbook/)

 

Lo que funcionó para mí es algo así como:

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

Después El reinicio del IDE, MyLibClass debe mostrarse en '' Sketch/Import Library ''.

Observe que la única forma que puedo ver hasta ahora para que un archivo de clase de biblioteca haga referencia a otros archivos de biblioteca es incluirlos relativamente (desde 'ubicación actual'), asumiendo que están en la misma carpeta principal arduino-0022/libraries (posiblemente pila relacionada   Pregunta de desbordamiento: Is it possible to include a library from another library using the Arduino IDE?).

De lo contrario, también debería ser posible enlazar el directorio MyLibClass directamente en MyLibClass (en lugar de hacer un directorio manualmente y luego vincular simbólicamente los archivos). Por la misma razón, el enlace simbólico a la ubicación alternativa ~/sketchbook/libraries también podría ser problemático.

Por último, una mejor organización, posiblemente, podría ser:

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

... que, después de enlazar simbólicamente a libraries, obligaría MyPdeSketch para mostrar debajo de los ejemplos de la biblioteca MyLibClass en Arduino IDE (Sin embargo, puede no será aplicable si quiere autocontene múltiples carpetas de clase bajo un solo directorio).

EDIT: o simplemente utilizar un Makefile - que trabajaría directamente con avr-gcc, sin pasar por el IDE Arduino (en cuyo caso, la organización de los archivos de bocetos se puede aflojar un poco) ..

6

Estoy de acuerdo con usted; esta es una forma intolerable de desarrollar software: ¡requiere que todos los archivos que necesita estén en el mismo directorio que el programa principal!

Para evitar esto, yo uso make para armar un único archivo .h de mis .h y .cpp fuentes - se puede ver este utiliza en this 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 es muy exigente con terminaciones de archivos - si pone un archivo .cpp o .cc en su directorio, lo usa automáticamente en el código fuente, y no puede incluir nada que no sea .cpp, .cc o .h, por lo que esta es la única forma de hacerlo.

Utilizo un truco similar también para juntar archivos JavaScript here.

Esto requiere que ejecute make después de editar sus archivos, pero dado que estoy usando un editor externo (Emacs) de todos modos, esto no supone ningún problema para mí.

3

Desafortunadamente, el IDE de Arduino es horrible y no muestra signos de mejora. No existe un sistema de compilación real, por lo que solo le permite crear programas que residen en un único directorio.

La única solución real es escribir un archivo MAKE, luego puede usar un IDE real. Tengo la esperanza de que algún día alguien escriba un plugin Arduino para QtCreator.

He aquí un makefile ejemplo:

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

1

Creo que sé lo hace necesidad de u exactamente.

usted tiene una carpeta de proyecto dicen MYPROJ_FOLDER y desea incluir una Bibliotecas carpeta que contiene más carpetas niños para sus bibliotecas personalizadas.

que tiene que hacer lo siguiente: 1- crear carpetas de la siguiente manera:

-MyProjFolder 
-MyProjFolder/MyProjFolder   

y luego crear un archivo con el nombre de la carpeta en .ino extensión -MyProjFolder/MyProjFolder/MyProjFolder.ino

2- crear la carpeta de bibliotecas: -MyProjFolder/bibliotecas nombre < < < < < no es una opción debe ser llamado así.

3- luego crear sus propias bibliotecas -MyProjFolder/bibliotecas/lib1 -MyProjFolder/bibliotecas/lib1/lib1.cpp -MyProjFolder/bibliotecas/lib1/ejemplos < < < < se trata de una carpeta -MyProjFolder/bibliotecas/lib1/Ejemplos/example1

repita el paso 3 como todo lo que quiere

También puedes ver http://arduino.cc/en/Guide/Libraries

-3

Porqué no lo hace simplemente escribir un guión con un solo comando de copia, la copia de nuestras bibliotecas de donde nuestra biblioteca se encuentra en la carpeta de biblioteca de Arduino IDE?

De esta manera mantenemos la estructura de archivos que queremos y usamos los requisitos de la biblioteca IDE sin problemas.

Algo como esto funciona para mí:

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

Tenga en cuenta que los caminos son en relación con mi propia estructura de archivos.

Espero que esto ayude a alguien. Esto incluye mi yo futuro que apuesto a que leerá esto en un futuro cercano ... ¡como de costumbre!

J

-1

Siguiendo las líneas de Hefny, que su proyecto sea un ejemplo para su biblioteca.

Por ejemplo (Unix env), digamos que las bibliotecas están en ~ Arduino/bibliotecas

Tu crear su proyecto ~ Arduino/bibliotecas/MiProyecto, sus bibliotecas van allí (por ejemplo ~/Arduino/bibliotecas/MiProyecto /module1.h ~/Arduino/bibliotecas/MyProject/module1.cpp ~/Arduino/bibliotecas/MyProject/module2.h ~/Arduino/bibliotecas/MyProject/module2.cpp

Ahora: mkdir -p ~ Arduino/libraries/MyProject/examples/myproj

editar ~ arduino/libraries/MyProject/examples/myproj/myproj.ino (tenga en cuenta que esto no es examples/myproj.ino but examples/myproj/myproj.ino)

Reinicie el IDE, debe encontrar su proyecto en el menú Archivo/Ejemplo/MiProyecto.

También tenga en cuenta que lo haga el include # include con

5

que tenía el mismo problema. Resuelto para Arduino IDE> 1.8. Parece una especialidad en nuevos IDEs (?) De acuerdo con la referencia (ver el enlace inferior).

Debe agregar un subdirectorio "src" antes de crear una carpeta de biblioteca.Así que, esencialmente su proyecto debe tener este aspecto:

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

y finalmente en su dibujo se hace referencia a:

#include "src/yourLib/yourLib.h" 

otra cosa en mi caso - si me falta la carpeta "src" - me sale el error mensaje de que no puede encontrar el archivo yourLib.cpp.

Nota: Estoy utilizando un sistema de Windows en caso de que difiera y en realidad VS Code como envoltorio para Arduino IDE. Pero ambos IDE lo compilan con esta estructura.

Referencias: https://forum.arduino.cc/index.php?topic=445230.0

+0

funcionó para mí, gracias: D –

+0

Lo mismo aquí en v1.8.3 gracias! – nimig18

0

Lo que ha funcionado para mí es crear un directorio, por ejemplo "src" bajo la dir boceto, y en virtud de que un directorio para cada biblioteca personal.

Ejemplo:

Tengo un proyecto llamado ObstacleRobot, en virtud de que una carpeta de mi bosquejo, llamado obstaclerobot (creado automáticamente por el IDE) y no mi bosquejo "obstacleRobot.ino"

Hasta ahora tenemos:

/ObstacleRobot 
    /obstaclerobot 
     obstacleRobot.ino 

luego quería incluir una biblioteca personal que estaba totalmente relacionado con este proyecto y no tenía sentido en incluirla en las bibliotecas IDE, así, de hecho, yo quiero hacer esto para cada parte de la robot, pero todavía estoy trabajando en eso.

lo que al final funcionó para mí fue:

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

Entonces lo que tiene que hacer en el boceto principal es escribir la incluyen los siguientes:

#include "src/Sonar/Sonar.h" 

Y eso es todo.

Cuestiones relacionadas