2013-02-20 1 views
7

J'écris actuellement une bibliothèque Arduino et je veux inclure les fichiers dans un sous-répertoire du dossier de la bibliothèque. Plus spécifiquement, je veux que les fichiers soient accessibles depuis l'esquisse Arduino.Inclure un fichier dans un dossier dans une bibliothèque Arduino

C'est ma structure de répertoire:

MyLib/MyLib.cpp 
MyLib/MyLib.h 
MyLib/Extra/SomeNiceFunctions.cpp 
MyLib/Extra/SomeNiceFunctions.h 

Voilà comment je suis en train d'inclure le fichier:

#include <MyLib.h> 
#include <Extra/SomeNiceFunctions.h> 

Il est évident que cela est faux à cause de la façon dont l'IDE est notamment la bibliothèque Dossiers. Quoi d'autre devrais-je essayer? Je pourrais diviser le dossier supplémentaire à un autre "bibliothèque" (un autre dossier) mais ce n'est pas ce que je suis après.

EDIT: C'est l'erreur que j'obtiens undefined reference to 'font8x8'. Ceci est défini dans Extra/SomeNiceFunctions.h.

Répondre

2

Ne pas utiliser

#include <MyLib.h> 
#include <Extra/SomeNiceFunctions.h> 

utiliser à la place

#include <arduinolib.h> 
#include "MyLib.h" 
#include "Extra/SomeNiceFunctions.h" 

des crochets angulaires, le compilateur regarde dans la norme-dossiers pour les fichiers d'entête. Vous voulez vos fichiers personnalisés dans votre répertoire de travail.

+0

Tous les fichiers sont dans mon dossier de bibliothèque Arduino, pas dans le dossier d'esquisse, mais vous avez raison! – giannoug

+1

Alors s'il vous plaît marquer comme réponse si cela a fonctionné. –

+0

Malheureusement, ce n'est pas le cas. – giannoug

-1

emprunt de this stack overflow question,

Le include_path inclut le répertoire de l'esquisse, le répertoire cible (/ matériel/core //) et le régulateur include (/ matériel/outils/régulateur/régulateur/include /), ainsi que tous les répertoires de bibliothèque (dans/hardware/libraries /) qui contiennent un fichier d'en-tête inclus par le fichier d'esquisse principal.

Essayez

// in myProject.ino 
#include <arduinolib.h> 
#include "MyLib.h" 

// in Mylib.h 
#include "./extra/SomeNiceFunctions.h" 
+1

'SomeNiceFunctions.h' n'est pas automatiquement inclus car il se trouve dans un sous-dossier d'un dossier de bibliothèque. – giannoug

+0

Dans la dernière phrase, il spécifie que l'en-tête doit être inclus par le fichier d'esquisse principal. Avez-vous essayé d'ajouter l'en-tête à l'esquisse principale? Avez-vous essayé d'inclure SomeNiceFunctions dans MyLib.h? –

0

En ce qui concerne les bibliothèques, y compris Arduion/Energia qui sont dans des sous-Arduino/Energia: Regardez où votre principal fichier include est et aller vers le haut (par exemple arduino.h/energia.h.) dans la structure du répertoire avec .. \ ou vers le bas jusqu'à ce que vous arriviez au fichier h désiré que vous voulez inclure. par ex. je: ..hardware \ noyaux \ cc3200 \ energia.h ..hardware \ bibliothèques \ SPI \ spi.h

Pour utiliser dans un fichier .cpp les fonctions de spi.h, je dois ajouter: #include <energia.h> suivi par #include <..\..\libraries\SPI\SPI.h

0

J'ai eu quelques problème avec cela. Je voulais juste une solution simple et en écrivant une bibliothèque dans CPP est la bonne façon - j'ai pris une esquisse - dire fichier robo.ino et l'ai ajouté à une simple bibliothèque include - de sorte qu'il n'y avait qu'un seul fichier dans la bibliothèque sous un dossier appelé Robot - Robo.h

├── sketchesfolder 
├── libraries 
│ ├── robot 
│ │ ├── robot.h 
├── robotsketch 
│ ├── Move.ino 

Maintenant en mouvement.INO - j'inclure juste le fichier

#include <robo.h> 

La seule chose que vous devez ajouter des fonctions simples est une déclaration de prototype - ou assurez-vous vos fonctions sont commandées par la première utilisation.

Ainsi, par exemple - mettre le programme d'installation() en bas et une fonction comme:

void halt(int wait); 

comme une définition de prototype à la tête du fichier robo.h

Il vous permet de partager une esquisser comme code commun sans le convertir en une librairie CPP. Mais vous devriez vraiment faire cela bien sûr.

Questions connexes