Errore durante la compilazione

Ciao a tutti!

Vi chiedo aiuto riguardo un errore che si presenta in fase di compilazione, ma prima vi spiego tutto.

Tempo fa avevo scritto uno sketch per un controllo di un acquario, T acqua, PH, ventole, riscaldatore, ecc.. poi per problemi di tempo non ho mai finito il lavoro. nell'ultimo periodo avendo più tempo ho deciso di finirlo.

Lo sketch era composto da un solo file, un unico TAB, dove all'interno c'era tutto, il setup, il loop, e le varie funzioni. Non mi ha mai dato errori e funziona.

Ho deciso di suddividerlo in più TAB in modo che sia più semplice comprenderlo. Ogni tab è un "copia e incolla" di parti dello sketch "primario" inserite all'interno di un void Funzione(). e così ho fatto, suddiviso tutto tranne il timer. in poche parole, l'unica funzione che non riesco a scrivere all'interno di un tab è il timer. tutte le altre sono riuscito tranquillamente e funziona.

Per capirci meglio (esempio per la temperatura)
-ho creato un TAB "temperatura"
-all' interno del TAB "temperatura" ho creato una funzione "temperatura"

  • ho copiato la parte di codice inerente alla lettura della temperatura che era nello sketch primario nella funzione "temperatura"
  • nello sketch primario al posto di tutta la parte di codice per la lettura della temperatura richiamo solo la funzione "temperatura"

tutte le funzioni non presentano errori e lo sketch provato con tutto l'hardware funziona. l'unico errore si presenta nel timer.

Nel file che ho allegato si può vedere l'errore che compare compilando (bisogna avere però le librerie installate altrimenti da altri errori). l'errore si trova appunto nel TAB timer ed è questo:

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows NT (unknown)), Board: "Arduino Mega 2560 or Mega ADK"
Timer:12: error: expected unqualified-id before 'if'
Timer:19: error: expected unqualified-id before 'if'
Timer:27: error: expected unqualified-id before 'if'
Timer:34: error: expected unqualified-id before 'if'
Timer:42: error: expected unqualified-id before 'if'
Timer:49: error: expected unqualified-id before 'if'
Timer:58: error: expected constructor, destructor, or type conversion before '.' token

Spero di non aver creato troppa confusione, l'intento era quello di semplificare.
Qualcuno sa dirmi dove sto sbagliando?

Grazie per l'aiuto
Saluti

Luca

Acquario_controller_2_00_DS18B20_08-12-2014.zip (12.2 KB)

Prova a compilare con la 1.5.8. A me non ha dato errori.
Ho compilato per Arduino MEGA, naturalmente.

Con la 1.0.6 escono fuori un sacco di errori. Pare principalmente che gli diano noia i commenti come "////testo\\", quindi con le barre e le barre retroverse. Boh.
Se togli il commento da Timer.ino vedrai che ne compaiono altri in altri punti dello sketch, dove hai quel tipo di commento.

Grazie per l'attenzione,

Ok, dunque:

-con la 1.5.8 mi da molti errori. le librerie le ho copiate nella cartella libraries.

-con la 1.0.6, se commenti tutto il TAB timer e rimetti quel pezzo di codice nel TAB principale (basta andare nel principale e togliere il commento nell' ultima parte dove era già scritto quel pezzo di codice) e funziona. Io lo sto usando in questo momento quindi vuol dire che ho compilato e caricato.

Però per i motivi citati prima vorrei separare anche la parte timer...

in allegato, lo stesso sketch di prima con la modifica che vi ho detto poco fa. non da errori e sta funzionando con tutto l'hardware e con le sue librerie...

Ma come è possibile? basta "spostare la parte timer portandola nel TAB timer che inizia a dare errori...

Acquario_controller_2_00_DS18B20_08-12-2014.zip (12.2 KB)

Chiedo scusa, leo72 ha ragione!

Ho ricompilato lo sketch rimettendo il timer nel TAB timer. ovviamente ho tolto la parte riguardante il timer dal TAB principlae. poi nel TAB timer ho tolto i commenti che diceva leo72 e non da un errore...

Detto ciò vi ringrazio moltissimo, adesso che ho verificato effettivamente in tutti gli altri TAB non c'è mai il commento //////testo\\\\

Per far si che possa imparare qualcosa da questo, vi chiedo: come mai nello TAB principale accetta quel commento e in un TAB separato no?

Grazie ancora!

Puoi tentare con il commento multiriga:

/* questo 
     è un 
        commento
             multiriga
*/

Perché accade non lo so, ma è evidente che il parser di arduino fraintende e apporta modifiche al codice quando lo riunisce in un solo file, modifiche che il compilatore rifuta. Quindi sembra proprio un bug del preprocessore di Arduino.

Ciao.

Concordo con Mauro

Concordo con questi due qui sopra.

ROTFL :stuck_out_tongue_closed_eyes:

ok, grazie molte per l'informazione.

Anche se di minor importanza come baco, è possibile segnalarlo?
vero anche che probabilmente nessuno fa un commento come quello che ho scritto. inoltre credo che basti uno spazio dopo i primi due "//" e funzioni, ad esempio ""// ///////testo\\\\".

Grazie ancora
e Auguri!!

Saluti

lucadh per curiosità, che lib rtc hai usato?

dunque, ora non ricordo bene perchè da quando l' ho scaricata e passato più di un anno, ma dato che lo shield arriva da futura credo che la libreria sia quella scaricabile dal sito futura nella parte dove spiega la scheda.

--> http://old.futurashop.it/download/RTClib.zip

RTClib.zip (5.12 KB)

lucadh:
inoltre credo che basti uno spazio dopo i primi due "//" e funzioni, ad esempio ""// ///////testo\\\\".

No, non funziona. Il problema, come ti ho detto, sono proprio le barre retroverse.
Se le togli, funziona anche con /////////testo senza spazi, con le barre retroverse non va neanche così: // ///////testo
No so se è un baco, ma di sicuro non riguarda l'Arduino ma il preprocessore: chissà cosa ci vede in \\\\\

Nella 1.5.8 che ha la nuova toolchain non da errori.

Capisco il tuo interesse verso la 1.5.8 però, numeri alla mano, la 1.0.6 è la versione che ancora è la più usata fra gli utenti, quindi non possiamo suggerire di cambiare IDE solo per un baco del genere. :wink: :smiley: