Je sais que vous êtes censé placer toutes les bibliothèques externes dans le dossier "libraries" du répertoire d'installation arduino, mais j'ai un projet qui utilise plusieurs bibliothèques que j'ai créées pour le projet et principalement pour garder tout ce code autonome et stocké du fichier pde principal. Cependant, j'ai essayé de placer les bibliothèques dans le même répertoire que le fichier PDE principal afin de pouvoir plus facilement tout synchroniser dans Subversion (je travaille dessus sur plusieurs ordinateurs) et je ne veux pas être obligé de continuer. en arrière et synchroniser les bibliothèques séparément. Aussi, juste pour pouvoir facilement compresser le dossier de dessin et savoir qu’il contient tout ce dont il a besoin.
J'ai essayé d'ajouter les fichiers d'en-tête à l'esquisse sous la forme d'un nouvel onglet, mais cela ne semble pas fonctionner du tout. Peu importe qu'ils fassent de même dans l'IDE Arduino.
J'ai également essayé d'ajouter les bibliothèques au répertoire sketch dans des sous-répertoires (ce que je préférerais grandement), puis de les lier comme suit:
#include "mylib/mylib.h"
et
#include <mylib/mylib.h>
Mais ces deux résultats entraînent des erreurs de fichier non trouvé.
Est-ce possible? Et si oui, comment puis-je les inclure dans le fichier principal pour la construction? De préférence dans leurs propres sous-répertoires.
J'ai eu le même problème. Résolu pour Arduino IDE> 1.8. Semble une spécialité dans les nouveaux IDE (?) Selon la référence (voir lien en bas).
Vous devez ajouter un sous-répertoire "src" avant de créer un dossier de bibliothèque. Donc, essentiellement, votre projet devrait ressembler à ceci:
/SketchDir (with *.ino file)
/SketchDir/src
/SketchDir/src/yourLib (with .h and .cpp file)
et enfin dans votre croquis vous faites référence:
#include "src/yourLib/yourLib.h"
sinon, dans mon cas - si je manque le dossier "src" - je reçois le message d'erreur indiquant qu'il ne peut pas trouver le fichier yourLib.cpp.
Remarque: J'utilise un système Windows au cas où il en serait différé et, en réalité, VS Code en tant que wrapper pour Arduino IDE. Mais les deux IDE le compilent avec cette structure.
Références: https://forum.arduino.cc/index.php?topic=445230.0
Pour les croquis que j'ai, les fichiers de bibliothèque "*.h"
et "*.cpp"
se trouvent en réalité dans le même dossier que l'esquisse, et je les appelle comme "someheader.h"
. J'ai également remarqué que si j'entre dans le menu sketch
et le add file...
, le fichier n'apparaît pas avant que je ferme et que je rouvre l'esquisse.
Je suis d'accord avec toi; C'est un moyen intolérable de développer un logiciel: il nécessite que tous les fichiers nécessaires soient dans le même répertoire que le programme principal!
Pour résoudre ce problème, j'utilise make
pour constituer un fichier .h
unique à partir de mes sources .h
et .cpp
- vous pouvez le voir utilisé dans ce fichier 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 $@
Arduino est très pointilleux sur les fins de fichier - si vous mettez un fichier .cpp
ou .cc
dans son répertoire, il l'utilise automatiquement dans le code source et vous ne pouvez pas inclure quoi que ce soit qui n'est pas un .cpp
, .cc
ou .h
- c'est donc le seul moyen pour le faire.
J'utilise un truc similaire pour assembler des fichiers JavaScript ici .
Cela nécessite que vous exécutiez make
après avoir modifié vos fichiers, mais comme j'utilise un éditeur externe (Emacs) de toute façon, cela ne me pose aucun problème.
Malheureusement, l'Arduino IDE est affreux et ne montre aucun signe d'amélioration. Il n’existe pas de système de construction réel, il ne vous permet donc que de créer des programmes situés dans un seul répertoire.
La seule solution réelle est d'écrire un fichier makefile, vous pouvez alors utiliser un véritable IDE. J'espère qu'un jour, quelqu'un écrira un plugin Arduino pour QtCreator.
Voici un exemple de makefile:
Je viens d'avoir ce même problème (j'aime aussi garder le code autonome), alors je vais juste noter quelques notes; disons que j'ai un MyPdeSketch.pde
utilisant MyLibClass.cpp
; alors je l'ai organisé comme ça
/path/to/skdir/MyPdeSketch/MyPdeSketch.pde
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h
(En principe, /path/to/skdir/
est équivalent à ~/sketchbook/
)
Ce qui a fonctionné pour moi est quelque chose comme:
mkdir /path/to/arduino-0022/libraries/MyLibClass
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/
Après le redémarrage de l'EDI, MyLibClass
devrait apparaître sous '' Bibliothèque d'esquisse/d'importation ''.
Notez que le seul moyen que je connaisse jusqu'ici pour un fichier de classe de bibliothèque de faire référence à d'autres fichiers de bibliothèque est de les inclure relativement (à partir de "emplacement actuel"), en supposant qu'ils se trouvent tous dans le même dossier arduino-0022/libraries
(éventuellement lié à une question de débordement de pile). : Est-il possible d'inclure une bibliothèque d'une autre bibliothèque en utilisant l'IDE Arduino?).
Sinon, il devrait également être possible de faire un lien symbolique vers le répertoire MyLibClass
directement dans arduino-0022/libraries
(au lieu de créer manuellement un répertoire, puis de créer des liens symboliques entre les fichiers). Pour la même raison, la création de liens symboliques vers l’emplacement alternatif ~/sketchbook/libraries
pourrait également poser problème.
Enfin, une meilleure organisation pourrait être:
/path/to/skdir/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyLibClass/MyLibClass.h
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde
... qui, après avoir créé un lien symbolique avec libraries
, obligerait MyPdeSketch
à s'afficher sous les exemples de la bibliothèque MyLibClass
dans Arduino IDE (toutefois, cela pourrait ne pas être applicable si vous voulez contenir plusieurs dossiers de classe annuaire).
EDIT: ou utilisez simplement un Makefile - qui fonctionnerait directement avec avr-gcc
, en contournant l’Arduino IDE (dans ce cas, l’organisation du fichier de carnet de croquis peut être quelque peu desserrée).
Pense que je sais de quoi as-tu besoin exactement.
vous avez un dossier de projet, par exemple MYPROJ_FOLDER et vous souhaitez inclure un dossier Libraries contenant davantage de dossiers enfants pour vos bibliothèques personnalisées.
vous devez procéder comme suit: 1- créer des dossiers comme suit:
-MyProjFolder
-MyProjFolder/MyProjFolder
puis créez un fichier avec le nom du dossier en extension .ino -MonProjFolder/MyProjFolder/MyProjFolder.ino
2- créer un dossier de bibliothèques: -MonProjFolder/Bibliothèques <<<<< nom n'est pas une option doit être appelée comme ça.
3- Créez ensuite vos propres bibliothèques -MyProjFolder/libraries/lib1 -MyProjFolder/libraries/lib1/lib1.cpp -MyProjFolder/libraries/lib1/examples <<<< c'est un dossier -MyProjFolder/libraries/lib1/examples/example1
répétez l'étape 3 autant que vous le souhaitez
vérifiez également http://arduino.cc/en/Guide/Libraries
Ce qui a fonctionné pour moi, c’est de créer un répertoire, par exemple "src" sous le répertoire sketch, et sous ce répertoire, un répertoire pour chaque bibliothèque personnelle.
Exemple:
J'ai un projet appelé ObstacleRobot, sous lequel se trouve un dossier pour mon croquis, nommé obstaclerobot (créé automatiquement par l'EDI) et mon croquis "obstacleRobot.ino"
Jusqu'à présent nous avons:
/ObstacleRobot
/obstaclerobot
obstacleRobot.ino
Ensuite, je voulais inclure une bibliothèque personnelle qui était entièrement liée à ce projet et n’avait aucun sens de l’inclure dans les bibliothèques IDE. En fait, je souhaite le faire pour chaque partie du robot, mais je reste J'y travaille.
Ce qui a finalement fonctionné pour moi a été:
/ObstacleRobot
/obstaclerobot
obstacleRobot.ino
/src
/Sonar
Sonar.h
Sonar.cpp
Ensuite, dans l’esquisse principale, vous devez écrire l’inclusion comme suit:
#include "src/Sonar/Sonar.h"
Et c'est tout.