2011-01-16 10 views
34

So che si suppone di posizionare qualsiasi libreria esterna nella cartella "librerie" della directory di installazione di arduino, ma ho un progetto che utilizza diverse librerie che ho creato per il progetto e principalmente per mantenere tutto quel codice autonomo e fuori dal file pde principale. Tuttavia, ho provato a posizionare le librerie nella stessa directory del file PDE principale in modo da poter mantenere più facilmente tutto sincronizzato in subversion (lavoro su questo su più computer) e non voglio dover andare avanti indietro e sincronizzando le librerie separatamente. Inoltre, solo per poter facilmente comprimere la cartella dello schizzo e sapere che contiene tutto ciò di cui ha bisogno.Conservazione di tutte le librerie nella directory dello schizzo di Arduino

Ho provato ad aggiungere i file di intestazione allo schizzo come una nuova scheda, ma non sembra funzionare affatto ... non importa nemmeno se dovessero salire nell'IDE di arduino.

Ho anche provato ad aggiungere le librerie alla directory schizzo in sottodirectory (quello che io preferisco di gran lunga) e quindi il collegamento a loro come:

#include "mylib/mylib.h" 

e

#include <mylib/mylib.h> 

Ma entrambi questi risultati in file non trovati errori.

È possibile? E, in caso affermativo, come li includo nel file principale per la costruzione? Preferibilmente nelle loro sottodirectory.

+0

Soluzione parziale qui utilizzando le macro: http://arduino.stackexchange.com/a/9575/6697 – jjz

risposta

8

Per gli schizzi che ho, le "*.h" e "*.cpp" file di libreria in realtà risiedere nella stessa cartella del disegno, e io li chiamo come "someheader.h". Ho anche notato che se vado nel menu sketch e add file... che il file non viene visualizzato finché non chiudo e riapre lo schizzo.

+3

Se li hai nella stessa cartella puoi includerli come '#include" libName.h "'. Ma è necessario ricaricare l'IDE prima di poter compilare il codice. – tbraun89

+1

Grazie tbraun, il trucco è RELOAD l'IDE –

3

Ho appena avuto lo stesso problema (mi piace anche mantenere il codice autosufficiente), quindi scriverò solo alcune note; dì che ho un MyPdeSketch.pde usando MyLibClass.cpp; poi l'ho organizzato in questo modo

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

(In linea di principio, /path/to/skdir/ qui è equivalente a ~/sketchbook/)

 

Quello che ha funzionato per me è qualcosa di simile:

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

Dopo il riavvio dell'IDE, MyLibClass dovrebbe essere visualizzato in '' Schizzo/Importa libreria ''.

Si noti che l'unico modo che posso vedere finora per un file di classe della libreria per fare riferimento ad altri file di libreria è includerli relativamente (dalla 'posizione corrente'), supponendo che siano tutti nella stessa cartella principale arduino-0022/libraries (possibilmente Stack correlato   Domanda di overflow: Is it possible to include a library from another library using the Arduino IDE?).

Altrimenti, dovrebbe anche essere possibile associare direttamente la directory MyLibClass a arduino-0022/libraries (invece di creare manualmente una directory e quindi associare i file ai collegamenti). Per lo stesso motivo, anche il collegamento simbolico alla posizione alternativa ~/sketchbook/libraries potrebbe essere problematico.

Infine, un'organizzazione forse meglio potrebbe essere:

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

... che, dopo un collegamento simbolico a libraries, costringerebbe MyPdeSketch per mostrare sotto gli esempi per la libreria MyLibClass in Arduino IDE (tuttavia, può non essere applicabile se si desidera auto-contenere più cartelle di classe in una singola directory).

EDIT: o semplicemente utilizzare un Makefile - che lavorare direttamente con avr-gcc, bypassando l'Arduino IDE (nel qual caso, l'organizzazione dei file album da disegno può essere un po 'allentata) ..

6

Sono d'accordo con te; questo è un modo intollerabile per sviluppare software: richiede ogni file che è necessario essere nella stessa directory del programma principale!

Per aggirare il problema, io uso make di mettere insieme un unico file .h dai miei .h e .cpp fonti - si può vedere questo utilizzato in 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 è molto esigente circa terminazioni dei file - se inserisci un file .cpp o .cc nella sua directory, lo utilizza automaticamente nella fonte e non puoi includere nulla che non sia un .cpp, .cc o .h - quindi questo è l'unico modo per farlo.

Io uso un trucco simile anche per mettere insieme i file JavaScript here.

Ciò richiede che si esegua make dopo aver modificato i file, ma poiché sto utilizzando un editor esterno (Emacs) in ogni caso, questo è zero problemi per me.

3

Sfortunatamente l'IDE di Arduino è orribile e non mostra segni di miglioramento. Non esiste un vero sistema di build, quindi consente solo di creare programmi che si trovano in una singola directory.

L'unica vera soluzione è scrivere un makefile, quindi è possibile utilizzare un IDE reale. Spero che un giorno qualcuno scriverà un plugin Arduino per QtCreator.

Ecco un esempio makefile:

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

1

credo di sapere cosa fare u bisogno esattamente.

si dispone di una cartella di progetto dicono MYPROJ_FOLDER e si desidera includere un cartella biblioteche che contiene più bambini cartelle per le vostre librerie personalizzate.

è necessario effettuare le seguenti operazioni: 1- creare cartelle come segue:

-MyProjFolder 
-MyProjFolder/MyProjFolder   

e quindi creare un file con il nome della cartella in .ino estensione -MyProjFolder/MyProjFolder/MyProjFolder.ino

2- creare la cartella librerie: -MyProjFolder/librerie nome < < < < < non è un'opzione dovrebbe essere chiamato così.

3- quindi creare le proprie librerie -MyProjFolder/librerie/lib1 -MyProjFolder/librerie/lib1/lib1.cpp -MyProjFolder/librerie/lib1/esempi < < < < questa è una cartella -MyProjFolder/librerie/lib1/examples/example1

ripetere il punto 3, per quanto si vuole

012.

controllare anche http://arduino.cc/en/Guide/Libraries

-3

Perchè non abbiamo solo scrivere uno script con un unico comando di copia, copiando le nostre librerie da dovunque nostra biblioteca si trova nella cartella della libreria Arduino?

In questo modo manteniamo la struttura del file che vogliamo e utilizziamo i requisiti della libreria IDE senza problemi.

Qualcosa come questo funziona per me:

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

Si noti che i percorsi sono relativi alla mia struttura di file.

Spero che questo aiuti qualcuno. Questo include il mio futuro io che scommetto che leggerò questo in un prossimo futuro ... come al solito!

J

-1

Seguendo le linee di Hefny, rendere il vostro progetto un esempio per la vostra biblioteca.

Per esempio (ENV Unix), diciamo che le librerie sono in ~ Arduino/librerie

tuo creare il progetto ~ Arduino/librerie/MyProject, le librerie ci vanno (ad esempio ~/Arduino/librerie/MyProject /module1.h ~/Arduino/librerie/MyProject/module1.cpp ~/Arduino/librerie/MyProject/module2.h ~/Arduino/librerie/MyProject/module2.cpp

Ora: mkdir -p ~ Arduino/librerie/MyProject/esempi/myproj

modifica ~ arduino/librerie/MyProject/esempi/myproj/myproj.ino (si noti che questo non è un esempio/myproj.ino ma esempi/myproj/myproj.ino)

Riavviare l'IDE, si dovrebbe trovare il progetto nel menu File/Esempio/MyProject.

Si noti inoltre che si fa la comprendono con #include

5

ho avuto lo stesso problema. Risolto per Arduino IDE> 1.8. Sembra una specialità nei nuovi IDE (?) Secondo il riferimento (vedi link in basso).

È necessario aggiungere una sottodirectory "src" prima di creare una cartella di libreria.Quindi, in sostanza il progetto dovrebbe essere simile a questo:

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

e, infine, nel tuo disegno si fa riferimento a:

#include "src/yourLib/yourLib.h" 

altrimenti nel mio caso - se mi manca la cartella "src" - ottengo l'errore messaggio che non riesce a trovare il file yourLib.cpp.

Nota: Sto usando un sistema Windows nel caso in cui differisce e in realtà VS Code come wrapper per Arduino IDE. Ma entrambi IDE lo compilano con questa struttura.

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

+0

ha funzionato per me, grazie: D –

+0

Lo stesso qui in v1.8.3 grazie! – nimig18

0

Ciò che ha funzionato per me è quello di creare una directory, ad esempio "src" sotto la dir schizzo, e sotto che una directory per ogni libreria personale.

Esempio:

Ho un progetto chiamato ObstacleRobot, sotto che una cartella per il mio disegno, di nome obstaclerobot (creata automaticamente dal IDE) e c'è il mio sketch "obstacleRobot.ino"

Fino ad oggi abbiamo:

/ObstacleRobot 
    /obstaclerobot 
     obstacleRobot.ino 

Poi ho voluto inserire una biblioteca personale che era pienamente correlato con questo progetto e non aveva senso in includendolo nelle biblioteche IDE, bene in realtà io voglio fare questo per ogni parte del robot ma sto ancora lavorando esso.

quello che alla fine ha funzionato per me era:

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

Allora che cosa si deve fare nel disegno principale è quello di scrivere l'inclusione nel modo seguente:

#include "src/Sonar/Sonar.h" 

E questo è tutto.

Problemi correlati