aiuto nel creare le schede in un sketch

ciao a tutti e buon 2017!!
Ho costruito un cubo led 5x5x5 su il mio arduino mega e tutto funziona a dovere solo che per gestire i led faccendogli fare diverse figure ho scrtto il codice più lungo e pesante della mia vita: quasi 4000 righe e oltre 32 kb di peso (record personale). Ora capite che se devo andare in cerca di qualcosa ci metto un etrnità a trovarla oltretutto il codice è destinato ad aumentare. Allora volevo sfruttare le schede: ci ho provato per un po' ma non ho capito come spostare la parte di codice su una nuova scheda ogni volta che l'ho faccio mi da continuamente errori. Ho visto che bisogna mettere un .h, ma non ho cappito dove e come. Poi devo ridichiarare tutti i pin oppure no???? Insomma mi serve qualcuno che mi spieghi come usare le schede oppure una guida (in italiano se possibile) che spieghi come posso fare.

Grazie mille per l' aiuto

P.S. Volevo mettere il codice, ma mi dice che supero i 9000 caratteri consentiti.

Buon 17!
Sarei interessato anch' io a spezzare il codice in diversi files. Già con 500 righe è pesante. A quanto pare bisogna costruirsi i files headers (*.h) o anche semplici files che si richiamano con gli #include.
Infatti poi rientra nella possibilità di riutilizzare il proprio codice per un nuovo programma.

Ma alle prime prove non ho avuto successo.
Per allegare un file grossi, usa l' opzione Attachments

Quando si spezza il codice in più file, tab nel IDE di Arduino, è necessario che ogni file contenga tutte le necessarie "#include qualcosa.h" altrimenti il compilatore non sa dove prendere i riferimenti mancanti.
Alcune regole di base, se si usano librerie è sufficiente inserire la relativa #include nel file principale, quello dove sono presenti setup() e main(), in tutti gli altri file vanno inserite le #include che riguardano solo questi e quelle che contengono dichiarazioni comuni, non facenti parte di librerie, a più parti del codice.
Le variabili globali vanno dichiarate come extern nei file aggiuntivi, p.e. se nel file principale avete "byte var1" negli altri file che devono usare questa variabile dovete inserire "extern byte var1", in questo modo il compilatore sa che la variabile var1 è stata dichiarata da qualche altra parte e viene usata nel vostro file.
Attenzione a non dichiarare variabili all'interno di file .h che devono essere usati da più file, in questo caso il compilatore vi fornisce errori di variabili con dichiarazioni multiple.

Io tempo fa avevo fatto un programma che per me era lungo e l'avevo suddiviso in piu schede che in realta erano delle funzioni che io richiamavo al occorenza .

astrobeed:
Quando si spezza il codice in più file, tab nel IDE di Arduino, è necessario che ogni file contenga tutte le necessarie "#include qualcosa.h" altrimenti il compilatore non sa dove prendere i riferimenti mancanti.
Alcune regole di base, se si usano librerie è sufficiente inserire la relativa #include nel file principale, quello dove sono presenti setup() e main(), in tutti gli altri file vanno inserite le #include che riguardano solo questi e quelle che contengono dichiarazioni comuni, non facenti parte di librerie, a più parti del codice.
Le variabili globali vanno dichiarate come extern nei file aggiuntivi, p.e. se nel file principale avete "byte var1" negli altri file che devono usare questa variabile dovete inserire "extern byte var1", in questo modo il compilatore sa che la variabile var1 è stata dichiarata da qualche altra parte e viene usata nel vostro file.
Attenzione a non dichiarare variabili all'interno di file .h che devono essere usati da più file, in questo caso il compilatore vi fornisce errori di variabili con dichiarazioni multiple.

ok.......Non mi è ancora chiaro. Adesso sto provando su uno sketch più semplice dove arduino accende due led insieme con un intervallo di un secondo e voglio dividere lo sketch su due schede: una scheda per il led 1 e una scheda per il led 2, ma continu a sbagliare qualcosa sul quel .h
Vi lascio i sketch delle due schede

scheda led 1

#define led1 7
#define led2 4
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  digitalWrite(led1, HIGH);
  delay(1000);
  digitalWrite(led1, LOW);
  delay(1000);
}

scheda led 2

#include led2.h
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
delay(1000);

Attenzione che il secondo tab non è una continuazione del primo, è un file a parte al cui interno devono esserci delle funzioni che richiami dal primo tab, oppure da altri tab.

Una cosa del tipo:

#define led1 7
#define led2 4
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  digitalWrite(led1, HIGH);
  delay(1000);
  digitalWrite(led1, LOW);
  delay(1000);
  Led_2();
}
#include led2.h

void led2_()
{
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
delay(1000);
}

astrobeed:
Attenzione che il secondo tab non è una continuazione del primo, è un file a parte al cui interno devono esserci delle funzioni che richiami dal primo tab, oppure da altri tab.

ho riscriito il codice come il tuo, ma mi da errore nella scheda del led 2: #include expect "FILENAME" or . Ho provato ad aggiungere il segno <> , ma cosi facendo mi da un altro errore: Errore di compilazione e sotto lo sketch (sotto la barra di caricamento per intenderci), mi mostra #include <led2.h>

ciao

Non avrei mai pensato di arrivare a "correggere" astrobeed , evidentemente il MMXVII stà portando delle conseguenze :stuck_out_tongue:
Nell'utilizzo dei tab all'interno dell'IDE non serve includere alcunchè; è poi l'IDE stesso che "unisce" tutti i file quando va a compilare lo sketch.

Nell'esempio scritto da astrobeed c'è un errore di battitura: nel primo tab richiama la funzione Led_2() che però nel secondo tab è dichiarata come led2_().

Togli l'include nel secondo tab e metti il nome corretto, vedrai che compila senza errori.

buon MMXVII a tutti
pippo72

pippo72:
Non avrei mai pensato di arrivare a "correggere" astrobeed , evidentemente il MMXVII stà portando delle conseguenze :stuck_out_tongue:

Infatti non mi puoi correggere :slight_smile:
Questo perché quello che ho indicato sono solo delle regole generali che vanno viste caso per caso, non è detto che se non metti gli include in tutti i file lo sketch non viene compilato, dipende da cosa contengono le include, se sono parti di librerie, ovvero la cosa va valutata caso per caso, se il codice non viene compilato e hai errore relativi a definizioni non trovate è perché manca la relativa include nel file principale o in quelli secondari.
Inoltre, per leggibilità del codice, è un errore mettere tutte le include nel file principale, vanno messe solo quelle indispensabili, negli altri file si mettono solo quelle che servono al file specifico, vale anche per le eventuali librerie da usare.
Faccio presente che l'IDE "maneggia" non poco i vari file .ino prima di darli in pasto al compilatore, questo per semplificare la stesura del codice, in C/C++ puro provate a scrivere del codice allo stesso degli sketch di Arduino, al netto di setup( ) e loop(), senza usare le funzioni/oggetti di wiring, e vedete quanti errori saltano fuori.:slight_smile:

astrobeed:
Infatti non mi puoi correggere :slight_smile:
Questo perché quello che ho indicato sono solo delle regole generali che vanno viste caso per caso, non è detto che se non metti gli include in tutti i file lo sketch non viene compilato, dipende da cosa contengono le include, se sono parti di librerie, ovvero la cosa va valutata caso per caso, se il codice non viene compilato e hai errore relativi a definizioni non trovate è perché manca la relativa include nel file principale o in quelli secondari.
Inoltre, per leggibilità del codice, è un errore mettere tutte le include nel file principale, vanno messe solo quelle indispensabili, negli altri file si mettono solo quelle che servono al file specifico, vale anche per le eventuali librerie da usare.
Faccio presente che l'IDE "maneggia" non poco i vari file .ino prima di darli in pasto al compilatore, questo per semplificare la stesura del codice, in C/C++ puro provate a scrivere del codice allo stesso degli sketch di Arduino, al netto di setup( ) e loop(), senza usare le funzioni/oggetti di wiring, e vedete quanti errori saltano fuori.:slight_smile:

ok ho risolto semplicemente rimuovento #include
adesso i due codici sono scritti così

#define led1 7
#define led2 4
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  digitalWrite(led1, HIGH);
  delay(1000);
  digitalWrite(led1, LOW);
  delay(1000);
  led_2();
}
void led_2(){
  digitalWrite(led2, HIGH);
  delay(1000);
  digitalWrite(led2, LOW);
  delay(1000);
}

ma quindi se io dovessi mettere delle librerie le devo mettere solo nella scheda che ne ha bisogno opppure su tutte?
Inoltre se io metto randomSeed(millis()); vale anche per le altre schede oppure lo devo riscrivere su ogni scheda che ha un comando random??

Ciao
Devi ricordare che alla fine anche se hai 20 tab il programma uno solo rimane.
Se devi includere delle librerie lo fai come sempre nel primo tab prima del void setup.

Ciao
Pippo72

astrobeed:
Infatti non mi puoi correggere :slight_smile:
Questo perché quello che ho indicato sono solo delle regole generali che vanno viste caso per caso, non è detto che se non metti gli include in tutti i file lo sketch non viene compilato, dipende da cosa contengono le include, se sono parti di librerie, ovvero la cosa va valutata caso per caso, se il codice non viene compilato e hai errore relativi a definizioni non trovate è perché manca la relativa include nel file principale o in quelli secondari.
Inoltre, per leggibilità del codice, è un errore mettere tutte le include nel file principale, vanno messe solo quelle indispensabili, negli altri file si mettono solo quelle che servono al file specifico, vale anche per le eventuali librerie da usare.
Faccio presente che l'IDE "maneggia" non poco i vari file .ino prima di darli in pasto al compilatore, questo per semplificare la stesura del codice, in C/C++ puro provate a scrivere del codice allo stesso degli sketch di Arduino, al netto di setup( ) e loop(), senza usare le funzioni/oggetti di wiring, e vedete quanti errori saltano fuori.:slight_smile:

ok tutto apposto adesso sono ruscito a scrivere il codice del cubo su più schede. In più mi sono acccorto che se chiamo il setup su una scheda arduino va a fare il setup,è normale??

Ciao

setup() è una funzione. Direi che se tu la chiami mi sembra normale che venga eseguita :wink:

Ciao
Pippo72

ok allora. Grazie mille a tutti e buon anno