Come Creare una Libreria di Costanti

Salve a tutti, è da poco che mi sono affacciato al mondo arduino ed è arrivato il primo problema (logistico).

Io avrei l’ esigenza di creare una libreria di “Array di Costanti” separata dallo sketch da cui poi richiamare solo l’ array che mi serve. Visto che sono Array MOLTO grandi non posso lasciarli tutti nello sketch. Al momento utilizzo il metodo che vi allego e ogni volta che devo cambiare l’ array attivo solo quello di cui ho bisogno.
Lascio tutti gli array con lo stesso nome e abilito solo quello che mi serve, invece io vorrei creare una libreria (con tutti i nomi distinti per ogni array ovviamente) e richiamare all’ occorrenza quello di cui ho bisogno.
Mi date una mano?
Grazie

#include <avr/pgmspace.h>

//const byte array[2000] PROGMEM={a,b,c,d,e......};
//const byte array[2000] PROGMEM={1,2,3,4,5......};
const byte array[2000] PROGMEM={x,y,z,w........};
//const byte array[2000] PROGMEM={8,7,6,5,.......};
//const byte array[2000] PROGMEM={...............};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly: 
  
}

Ti conviene farti aiutare dal pre-compilatore usando le #define https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html#Ifdef

#define ARR1

#ifdef ARR1
const byte array[2000] PROGMEM={a,b,c,d,e......};
#endif
#ifdef ARR2
const byte array[2000] PROGMEM={1,2,3,4,5......};
#endif
...etc...

grazie mille della celere risposta, più tardi provo, altra esigenza, posso anche metterle in altra scheda? nel senso che visto che sono enormi vorrei levarle dalla pagina principale dello sketch per rendere il listato più leggibile e fluido. grazie ancora.

Ok, provato, grazie mille, funziona alla grande, ho messo tutto in una scheda separata ripulendo per bene la scheda principale. Grazie ancora.

LucianoArdu: grazie mille della celere risposta, più tardi provo, altra esigenza, posso anche metterle in altra scheda? nel senso che visto che sono enormi vorrei levarle dalla pagina principale dello sketch per rendere il listato più leggibile e fluido. grazie ancora.

Mettili all'interno di un file .h, p.e. "definizioni.h", che includi nello sketch principale, in questo modo le troverai visibili in un tab dedicato sull'editor del IDE.

si è più o meno quello che ho fatto mettendo tutte le costanti con gli #ifdef in una nuova tab, che in automatico mi ha creato un file . ino. Ora ho rinominato quel file in .h, me lo ritrovo nelle tab ma se compilo mi da errore, devo richiamare in qualche modo il file .h? o comunque cosa cambia da come avevo fatto con il file .ino?

Se crei un file .ino, l'IDE di Arduino prima di passare il codice al compilatore lo ricopia nell' .ino principale (il primo se hai più tab) e poi compila. Se invece crei un file .h l'IDE non lo elabora, allora dei dare tu il comando al pre-processore con un #include "nomefile.h" nello sketch principale prima di tutto il resto.

ci ho provato, ma le costanti non mi vengono riconosciute.
Dove deve essere memorizzato il file .h? io lo tengo nella cartello dello sketch.
il file .h contiene semplicemente esattamente quello che avevo nel file .ino, quindi :

#ifdef ARR1
const byte array[2000] PROGMEM={a,b,c,d,e......};
#endif
#ifdef ARR2
const byte array[2000] PROGMEM={1,2,3,4,5......};
#endif
...etc...

e all’ inizio dello sketch ho messo #include “nomefile.h” (ho provato anche #include <nomefile.h>.
e poco sotto #define ARR1

Per nomefile intendo il nome del file con dentro le costanti. Quindi se l'hai denominato definizioni.h l'include sarà

#include "definizioni.h"

si si lo avevo capito, ho fatto così, ma le costanti non mi vengono riconosciute.

Come deve essere strutturato il file .h? uguale al file .ino come detto sopra? e dove deve essere memorizzato?

mmmm, sto cercando di documentarmi ma non ci sto capendo molto e sto per partire per la tangente. Mi pare di aver capito, ma datemene conferma vi prego, che con il file .h devo associarci anche il file .c. Penso che per il momento mi sta bene la prima soluzione con il #include, ma il discorso del file .h mi incuriosisce e presto vorrei tornarci su, dopo essere entrato in loop ne sono uscito solo partendo per la tangente...e non ci sto capendo più nulla.... :) :) :)