wake-up-neo.net

Alle Bibliotheken im Arduino-Skizzenverzeichnis aufbewahren

Ich weiß, dass Sie alle externen Bibliotheken unter dem Ordner "Libraries" des Installationsverzeichnisses von arduino ablegen sollen, aber ich habe ein Projekt, das mehrere Bibliotheken verwendet, die ich für das Projekt erstellt habe, und hauptsächlich, um den gesamten Code in sich zu halten der Haupt-PDE-Datei. Ich habe jedoch versucht, die Bibliotheken im selben Verzeichnis wie die Haupt-PDE-Datei zu platzieren, damit ich in Subversion (auf mehreren Computern arbeite) alles auf dem neuesten Stand halten kann, und ich möchte nicht weitermachen zurück und synchronisieren Sie die Bibliotheken separat. Nur um einfach in der Lage zu sein, den Skizzenordner einfach zu zippen und zu wissen, dass er alles enthält, was er benötigt.

Ich habe versucht, die Header-Dateien als neue Registerkarte in die Skizze einzufügen, aber das scheint überhaupt nicht zu funktionieren ... egal, ob sie sich in der Arduino-IDE befinden sollten.

Ich habe auch versucht, die Bibliotheken zum Skizzenverzeichnis in Unterverzeichnissen hinzuzufügen (was ich sehr bevorzugen würde) und dann eine Verknüpfung zu ihnen herzustellen:

#include "mylib/mylib.h"

und

#include <mylib/mylib.h>

Beide führen jedoch dazu, dass die Datei keine Fehler gefunden hat.

Ist das möglich? Und wenn ja, wie füge ich sie in die Hauptdatei ein, um sie zu erstellen? Vorzugsweise in eigenen Unterverzeichnissen.

37
Adam Haile

Ich hatte das gleiche Problem. Gelöst für Arduino IDE> 1.8. Scheint eine Spezialität in neueren IDEs (?) Gemäß der Referenz (siehe unterer Link).

Sie müssen ein "src" -Unterverzeichnis hinzufügen, bevor Sie einen Bibliotheksordner erstellen. Ihr Projekt sollte also im Wesentlichen so aussehen: 

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

und schließlich verweisen Sie in Ihrer Skizze auf: 

#include "src/yourLib/yourLib.h"  

andernfalls in meinem Fall - wenn der Ordner "src" fehlt, erhalte ich die Fehlermeldung, dass die Datei yourLib.cpp nicht gefunden wird. 

Hinweis: Ich verwende ein Windows-System für den Fall, dass es sich unterscheidet, und tatsächlich VS Code als Wrapper für Arduino IDE. Aber beide IDE kompilieren es mit dieser Struktur. 

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

9
Uwe

Für die Skizzen, die ich habe, befinden sich die Bibliotheksdateien "*.h" und "*.cpp" tatsächlich im selben Ordner wie die Skizze, und ich nenne sie wie "someheader.h". Ich habe auch bemerkt, dass, wenn ich in sketch menu und add file... gehe, die Datei nicht erscheint, bis ich die Skizze schließe und wieder öffne. 

9
KyleWpppd

Ich stimme mit Ihnen ein; Dies ist eine unerträgliche Methode, um Software zu entwickeln: Sie erfordert, dass sich jede Datei, die Sie benötigen, im selben Verzeichnis befindet wie das Hauptprogramm!

Um dies zu umgehen, verwende ich make, um eine einzelne .h-Datei aus meinen .h- und .cpp-Quellen zusammenzustellen. Sie können dies in this Makefile sehen: 

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 ist sehr wählerisch in Bezug auf Dateiendungen. Wenn Sie eine .cpp- oder .cc-Datei in sein Verzeichnis einfügen, wird sie automatisch in die Quelle eingefügt. Sie können nichts einfügen, was kein .cpp, .cc oder .h ist. Dies ist also der einzige Weg es zu tun.

Einen ähnlichen Trick benutze ich auch, um JavaScript-Dateien zusammenzustellen - hier .

Dies erfordert, dass Sie make ausführen, nachdem Sie Ihre Dateien bearbeitet haben. Da ich jedoch sowieso einen externen Editor (Emacs) verwende, ist dies kein Problem für mich.

8
Tom Swirly

Leider ist der Arduino IDE schrecklich und zeigt keine Anzeichen einer Verbesserung. Es gibt kein echtes Build-System, so dass Sie nur Programme erstellen können, die sich in einem einzigen Verzeichnis befinden.

Die einzige echte Lösung besteht darin, ein Makefile zu schreiben, dann können Sie eine echte IDE verwenden. Ich hoffe, dass eines Tages jemand ein Arduino-Plugin für QtCreator schreibt.

Hier ist ein Beispiel-Makefile:

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

4
Timmmm

Ich hatte gerade das gleiche Problem (ich halte den Code auch gerne eigenständig), also schreibe ich mir nur ein paar Notizen auf. sage, ich habe einen MyPdeSketch.pde mit MyLibClass.cpp; dann habe ich es so organisiert

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

(Im Prinzip entspricht /path/to/skdir/ hier ~/sketchbook/)

Was für mich funktioniert hat, ist so etwas wie:

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

Nach dem Neustart der IDE sollte MyLibClass unter '' Sketch/Import Library '' angezeigt werden. 

Beachten Sie, dass der einzige Weg, den eine Bibliotheksklassendatei auf andere Bibliotheksdateien verweisen kann, darin besteht, sie relativ (vom aktuellen Speicherort) einzuschließen, vorausgesetzt, sie befinden sich alle im selben arduino-0022/libraries-Hauptordner (möglicherweise verwandte Stack Overflow-Frage) : Kann eine Bibliothek aus einer anderen Bibliothek mithilfe der Arduino IDE hinzugefügt werden?). 

Ansonsten sollte es auch möglich sein, das Verzeichnis MyLibClass direkt mit arduino-0022/libraries zu verknüpfen (anstatt manuell ein Verzeichnis zu erstellen und dann die Dateien symbolisch zu verknüpfen). Aus demselben Grund kann die Verknüpfung mit dem alternativen Speicherort ~/sketchbook/libraries ebenfalls problematisch sein. 

Eine möglicherweise bessere Organisation könnte schließlich sein: 

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

... die nach Symlinking mit librariesMyPdeSketch zwingen würde, unter den Beispielen für die MyLibClass-Bibliothek in Arduino IDE angezeigt zu werden (es kann jedoch nicht zutreffend sein, wenn Sie mehrere Klassenordner unter einem einzigen Ordner enthalten möchten Verzeichnis).

BEARBEITEN: oder verwenden Sie einfach ein Makefile -, das direkt mit avr-gcc zusammenarbeitet und den Arduino IDE umgeht (in diesem Fall kann die Organisation der Skizzenbuchdatei etwas gelockert sein). 

3
sdaau

Ich glaube, ich weiß genau, was Sie brauchen.

sie haben einen Projektordner, beispielsweise MYPROJ_FOLDER, und Sie möchten einen Libraries -Ordner hinzufügen, der weitere untergeordnete Ordner für Ihre benutzerdefinierten Bibliotheken enthält.

sie müssen Folgendes tun: 1- Ordner wie folgt erstellen:

-MyProjFolder
-MyProjFolder/MyProjFolder        

erstellen Sie dann eine Datei mit dem Ordnernamen in der .ino-Erweiterung -MyProjFolder/MyProjFolder/MyProjFolder.ino

2- Bibliotheksordner erstellen: -MyProjFolder/Libraries <<<<< Name ist keine Option, die so aufgerufen werden sollte.

3- Erstellen Sie dann Ihre eigenen Bibliotheken -MyProjFolder/Libraries/lib1 -MyProjFolder/libraries/lib1/lib1.cpp -MyProjFolder/Libraries/Lib1/Beispiele <<<< Dies ist ein Ordner -MyProjFolder/Libraries/Lib1/Beispiele/Beispiel1 

wiederhole Schritt 3 so oft du willst

Überprüfen Sie auch http://arduino.cc/de/Guide/Libraries

1
M.Hefny

Was für mich funktioniert hat, ist das Erstellen eines Verzeichnisses, z. B. "src" unter dem Skizzenverzeichnis, und darunter ein Verzeichnis für jede persönliche Bibliothek. 

Beispiel:

Ich habe ein Projekt namens ObstacleRobot, darunter einen Ordner für meine Skizze, genannt obstaclerobot (automatisch von der IDE erstellt) und dort meine Skizze "obstacleRobot.ino".

Bis jetzt haben wir:

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino

Dann wollte ich eine persönliche Bibliothek aufnehmen, die vollständig mit diesem Projekt in Verbindung steht und es nicht sinnvoll machte, sie in die IDE -Bibliotheken aufzunehmen. Eigentlich möchte ich dies für jeden Teil des Roboters tun, aber ich bin immer noch dabei arbeiten daran.

Was am Ende für mich gearbeitet hat war:

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

In der Hauptskizze müssen Sie das Include dann wie folgt schreiben:

#include "src/Sonar/Sonar.h"

Und das ist alles.

0
RaistlinMolina