Uso delle schede nell'IDE di Arduino

Lo sketch dell'ultimo progetto che ho in cantiere è diventato grande e avrei voluto spezzarlo in più parti. Da poco ho scoperto che si possono utilizzare nell'IDE le schede aggiuntive. Purtroppo mi creano non pochi problemi, infatti in fase di compilazione è strettamente indispensabile l'ordine con cui vengono richiamate queste schede a livello di codice. In alcuni casi, quando le funzioni presenti in un modulo(A) richiamano una funzione presente nel modulo(B) e viceversa, il problema diventa irrisolvibile. Ci sono stratagemmi? Quando 40 anni fa programmavo in Pascal si metteva il Prototype della funzione prima in tal modo chiunque l'avesse richiamata sapeva di cosa si trattava. E con Arduino, come si risolve? Grazie a tutti, Claudio

Uso moltissimo le TAB, ma non ho mai avuto problemi, almeno sino alla versione 1.6.5

La TAB principale deve avere il nome del progetto, mentre le successive possono avere nomi diversi.

Ad esempio. io aggiungo le TAB Setup e Loop in cui inserisco le relative routine, ma anche la TAB Utility che contiene tutte le funzioni che uso.

Nella directory troverai i file creati con l'estensione .ino:

Progetto.ino Setup.ino Loop.ino Utility.ino

crc57: Quando 40 anni fa programmavo in Pascal si metteva il Prototype della funzione prima in tal modo chiunque l'avesse richiamata sapeva di cosa si trattava. E con Arduino, come si risolve?

I prototipi della funzione e altre cosette le crea il pre-processore dell'IDE noto come Arduino-Builder. Se vuoi approfondire trovi il codice su Github (https://github.com/arduino/arduino-builder)

Questa gestione "automatica" dei prototipi di Arduino non mi è mai piaciuta, anche perché prima del nuovo Builder faceva più male che bene. Ora è migliorata, ma ad esempio non so se funziona anche tra moduli diversi o solo all'interno dello stesso file, cosa da cui potrebbe derivare il problema in oggetto.

Se vuoi fare le cose per bene, più in "stile C" che "stile Arduino", segui queste linee guida: - Il modulo principale, ovvero quello che contiene setup() e loop(), deve avere suffisso .ino e nome uguale alla cartella in cui è contenuto. In sostanza quello che avrebbe se fosse l'unico modulo. - Per ogni modulo aggiuntivo crea un file .cpp con le funzioni e/o classi che desideri. - Per ogni file .cpp crea anche un file con lo stesso nome ma suffisso .h, in cui riporti i prototipi e tutto ciò che deve essere visibile fuori dal modulo. - Nel modulo principale #includi il file .h di ogni modulo esterno che ti serve. Puoi anche #includere un modulo in un altro, se ti serve.