Tab Multiple

Meno male che ti avevo detto di non mettere definizioni di variabili dentro il file .h :grin: Il tuo initialization.h è un macello.

Lo so ... ma quello devo cambiarlo ancora. Un passo alla volta :(

Allora, io ho una mia libreria con il suo .h che deve usare la libreria SoftwareSerial.h ... ... naturalmente nel MIO .h c'è l'include della SoftwareSerial.h e avevo immaginato che includendo nel programma principale solo il mio .h dovesse bastare (... dato che la SoftwareSerial la uso solo dentro quella mia libreria e non nel programma principale).

E invece NO, se prima dell include del MIO .h non includo comunque il SoftwareSerial.h ... da errore ... ... credo sia una limitazione dell'IDE.

In pratica ... tutte le include che hai nel tuo initialization.h ... devi ripeterle ANCHE nel Controller_v3_2.ino ... e vedrai che compila ... ;)

Guglielmo

Altra cosa, non puoi inizializzare una classe dentro un file .h, il tuo errore non è che non trova la libreria è che inizializzi la classe all'interno del file h. Dentro il file .h ci devono stare solo i prototipi delle funzioni, le #define, le #include, le pragma ed eventuali opzioni per la compilazione condizionale, però solo per le cose che ho elencato prima, tutte le altre cose è meglio che non le metti nei file .h a meno che non sai perfettamente quello che stai facendo e hai una buona esperienza con il C.

Ok. Io avevo pensato di fare cosí per far si che ci fosse un file che riunisse tutte le variabili che mi servono e che devono essere inizializzate sin da subito.

gpb01: E invece NO, se prima dell include del MIO .h non includo comunque il SoftwareSerial.h ... da errore ... ... credo sia una limitazione dell'IDE.

Si le include delle librerie di Arduino devono stare tutte nel file .ino principale, è un limite, ma anche un errore, di come l'IDE compone il file da dare in pasto al compilatore. L'uso del file .h generale è limitato solo ai file .h del progetto e le relative define, include, etc.

f.schiano: Ok. Io avevo pensato di fare cosí per far si che ci fosse un file che riunisse tutte le variabili che mi servono e che devono essere inizializzate sin da subito.

Quello lo fai con una funzione dedicata, p.e. init_sys(), che si trova da qualche parte nel programma, non si fa nel file .h.

Ok va benissimo allora devo aggiustare un pó il mio codice.

Invece a proposito dell´errore che avevo prima? Non c´entra niente con questo vero?

Devo seguire il consiglio di Guglielmo?

astrobeed: è un limite, ma anche un errore, di come l'IDE compone il file da dare in pasto al compilatore.

Si, infatti non so cosa combini con il codice ma con questa storia [u]di voler creare lui i prototipi delle funzioni/u e di gestire lui le include ... è un casino ... :grin: XD :grin: XD

f.schiano: Devo seguire il consiglio di Guglielmo?

... puoi anche non seguirlo, ma tanto se non metti gli include nel .ino non ne esci ... ]:D ]:D ]:D

Guglielmo

ahahahah, non intendevo dire che non volevo seguire il tuo consiglio. Ma volevo sapere se era quella la soluzione al mio problema precedente. :)

Grazie mille per l´aiuto . Appena posso modifico il codice per averne uno piú pulito . Poi lo riposto cosí se avete tempo e vedete dei MACRO-ORRORI come mi ha fatto notare astrobeed continuo a fixarlo :) !

Grazie davvero, scappo al mio corso di tedesco, a stasera!

... comunque .. mettere le include risolve una parte dei problemi ... poi saltano fuori altri errori nel codice degli altri pezzi ... :roll_eyes:

Dovrai fare un po' di correzioni ... ;)

Guglielmo

Tutto questo si può riassumere così: l'IDE di Arduino non è fatto per strutturare il codice in questo modo ;)

leo72: l'IDE di Arduino non è fatto per strutturare il codice in questo modo ;)

Il modo di Fabrizio è sbagliato/incasinato a prescindere dall'IDE di Arduino, pure scrivendo il codice in C/C++, senza wiring, nel modo in cui l'ha strutturato il compilatore gli fa lo stesso le pernacchie :)

Non ho guardato il suo archivio... non mi permetto di commentare una cosa che non ho visto, per cui parlo solo delle "tab" dell'IDE. che più che tab multifile sono solo "rate" del programma principale ;)

Astro ha completamente ragione. Il mio codice é incasinatissimo . Purtroppo come ho detto non sono un esperto di C .

Penso che la cosa migliore sará scrivere direttamente il tutto sotto forma di libreria. Che ne pensate?

Con il file .h seguendo le istruzioni di astro e il file cpp con le implementazioni delle funzioni.

Fab.

Ho provato, probabilmente non nel modo giusto, a fare quello che mi ha detto astro e ho messo l´inizializzazione delle variabili che mi servono in una funzione:

initialize_sys(){.........}

nella void setup() come prima istruzione ci metto:

initialize_sys();

Ma poi se cerco di usare una variabile come "BaudRate" che sta nella mia funzione initialize_sys(){... BaudRate=115200;}

Il compilatore mi dice che la variabile non é definita.

EDIT: Sto dando un´occhiata a questo:

http://arduino.cc/en/Hacking/LibraryTutorial

Penso che leggendo questa pagina riesco a risolvere. :)

f.schiano: Ma poi se cerco di usare una variabile come "BaudRate" che sta nella mia funzione initialize_sys(){... BaudRate=115200;}

Premesso che per il baud rate sarebbe meglio usare una #define, così non sprechi ram, però se le variabili non le dichiari come globali non le vedrai mai all'interno di altre funzioni.

ok ma quindi tornando al concetto di libreria, per definire queste variabili globali e NON dovendo inserirle nel file .h , devo inserirle semplicemente nel file .cpp al di fuori di una funzione e non all´interno della funzione initialize_system() ?

f.schiano: ok ma quindi tornando al concetto di libreria, per definire queste variabili globali e NON dovendo inserirle nel file .h , devo inserirle semplicemente nel file .cpp al di fuori di una funzione e non all´interno della funzione initialize_system() ?

Tutte le variabili definite al di fuori di una funzione sono globali, se definite in un file diverso da quello in cui vengono utilizzate è necessario inserirle nell'header come "extern". Esempio nel file "a.c", o .cpp, definisci come globale "int variabile", per poterla utilizzare nel file "b.c" devi dichiararla, nel header, come "extern int variabile".