2013-02-20 7 views
7

Attualmente sto scrivendo una libreria Arduino e voglio includere i file in una sottodirectory all'interno della cartella della libreria. Più specificamente, voglio che i file siano accessibili dallo schizzo di Arduino.Includere un file all'interno di una cartella in una libreria Arduino

Questa è la mia struttura di directory:

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

Questo è il modo che sto cercando di includere il file:

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

Ovviamente questo è sbagliato a causa del modo in cui l'IDE è compresa la biblioteca cartelle. Cos'altro dovrei provare? Potrei dividere la cartella Extra in un'altra "Libreria" (un'altra cartella) ma non è quello che sto cercando.

MODIFICA: Questo è l'errore che sto ricevendo undefined reference to 'font8x8'. Questo è definito in Extra/SomeNiceFunctions.h.

risposta

2

Non utilizzare

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

invece utilizzare

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

Utilizzando parentesi angolari, il compilatore sembra nella norma-cartelle per includere-files. Vuoi i tuoi file personalizzati nella tua directory di lavoro.

+0

Tutti i file si trovano nella cartella della mia libreria Arduino, non nella cartella degli schizzi, ma tu hai ragione! – giannoug

+1

Quindi si prega di contrassegnare come risposta se ha funzionato. –

+0

Sfortunatamente no. – giannoug

-1

Prendendo in prestito da this stack overflow question,

Il percorso di inclusione comprende directory del disegno, la directory di destinazione (/ hardware/core //) e l'AVR includono directory (/ hardware/tools/AVR/AVR/include /), nonché qualsiasi directory di libreria (in/hardware/librerie /) che contengono un file di intestazione che è incluso nel file di schizzo principale.

Prova

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

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

'SomeNiceFunctions.h' non viene incluso automaticamente perché si trova in una sottocartella all'interno di una cartella della libreria. – giannoug

+0

Nell'ultima frase, specifica che l'intestazione deve essere inclusa dal file di schizzo principale. Hai provato ad aggiungere l'intestazione allo schizzo principale? Hai provato a includere SomeNiceFunctions in MyLib.h? –

0

Per quanto riguarda comprese le librerie Arduion/Energia che si trovano in sottocartelle Arduino/Energia: Guardate dove il vostro file di inclusione principale è e risalire (ad es arduino.h/energia.h.) nella struttura della directory con .. \ o verso il basso fino ad arrivare al file h desiderato che si desidera includere. es. ho: ..hardware \ core \ cc3200 \ energia.h ..hardware \ librerie \ SPI \ spi.h

Per poter utilizzare in un cpp depositare le funzioni spi.h, devo aggiungere: #include <energia.h> seguito da #include <..\..\libraries\SPI\SPI.h

0

ho avuto qualche un problema con questo. Volevo solo una soluzione semplice e mentre scrivevo una libreria in CPP è il modo corretto - ho preso uno schizzo - dico il file robo.ino e l'ho aggiunto a una libreria semplice - in modo che ci fosse un solo file nella libreria sotto una cartella chiamato Robot - robo.h

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

Ora in movimento.ino - ho solo includere il file

#include <robo.h> 

L'unica cosa che è necessario aggiungere per le funzioni semplici è una dichiarazione prototipo - o assicurarsi che il proprio funzioni sono ordinate per primo utilizzo.

Così, per esempio - ha messo Setup() nella parte inferiore e una funzione del tipo:

void halt(int wait); 

come una definizione prototipo al capo del file robo.h

Esso consente all'utente di condividere un abbozzare come codice comune senza convertirlo in una lib di CPP. Ma dovresti farlo davvero, naturalmente.

Problemi correlati