...ma ciao!
è possibile utilizzare un file di libreria richiamato con l'include, che contenga al suo interno delle costanti di tipo array?
Una cosa cosi':
Mi sta dando errore di compilazione :
exit status 1
expected ';' before '}' token
E non capisco se è perhcè non è possibile o se serve una sintassi particolare.
Siccome gli elementi sono parecchi, preferirei, per pulizia, non dover dichiarare ogni singolo elemento nel programma principale.
grazie mille!
Geppo!
se non scrivi ANCHE come usi quelle costanti, difficile aiutarti.
una #define semplicemente il precompilatore rimpiazza la parola a desta con quello che sta a sinistra. se necessario un ; lo hai dimenticato
3., se vuoi semplificare il programma principale, metti quelle dichiarazioni di array in un altro file .h esempio pippo.h e poi fai #include "pippo.h" al posto delle dichiarazioni nel file principale
Se togli le parentesi quadre ed assegni il #define ad un array compili correttamente, ma non capisco qual'é il vantaggio ad usare il #define al posto dei valori costanti per inizializzare un array.
Si forse non sono stato chiaro quando ho detto che uso l'include.
Il mio dubbio non era sull'uso dell'include e il file separato, ma sulla sintassi per dichiarare gli array in quel file.
Uso il define perchè tutti quegli array ce li ho in due file .h separati dal programma principale.
Per questo non ci sono i punti e virgola.
Si tratta praticamente di accordi musicali che vado a richiamare a seconda del valore di un potenziometro
In un file .h ho il range di posizione che definisce l'accordo e in un altro ho le note che costituiscono l'accordo.
Quindi seguendo gli esempi che vi ho postato, se il potenziometro è in posizione 65.
Vorrei fare una cosa cosi0:
...
else if (posizione >= GS4[0] && posizione < GS4[1]){
accordo = CH_GS4;
Po quella variabile accordo la paserei ad una funzione che si occuperebbe di prendere i singoli elementi e convertirli in frequenze.
Puo' funzionare? Confermate che basta togliere le parentesi quadre nel define?
Con solo pezzi non possiamo dirti nulla.
Cosa è accordo ? di che tipo è ?
la define di CH_GS4 non ha nessun senso.
Ti ripeto che la #define semplicemente sostituisce, come ti ha mostrato @cotestatnt
ma... SOLO nella dichiarazione della variabile puoi indicare gli elementi tra graffe.
Se ti aspetti che la riga:
accordo = CH_GS4;
al posto di CH_GS4 venga messo {1,2,3} ovvero un elenco di elementi, non è possibile.
accordo è una variabile di tipo Array e si, vorrei che a quel punto contenesse {"GS4","C5","DS5"}
Così come succede se anziché usare gli Array uso dei valori interi.
Cioè:
Se nel file.h ho: #define CH_GS4 27
E nel programma principale accordo lo inizializzo come intero, a quel punto accordo=CH_GS4 fa sì che accordo valga 27.
Se invece nel file.h avessi: #define CH_GS4[] {"GS4","C5","DS5"}
Nel programma principale accordo lo inizializzerei come Array e vorrei che accordo=CH_GS4 facesse si che accordo valga {"GS4","C5","DS5"}
È plausibile o comunque fattibile una cosa del genere in qualche modo?
Ma non puoi semplicemente usare un array di char array?
(magari mettendolo in flash per risparmiare RAM, anche se si complica un po' recuperare le stringhe).
No perché se definisci un array, stai dichiarando un puntatore ad una zona di memoria di dimensioni pari a quella occupata dall'array stesso. Infatti devi o specificare la dimensione, oppure inizializzarlo con dei valori in sede di dichiarazione.
char accordo[] = {....};
se fai un qualcosa del genere
accordo = x;
stai assegnando la variabile x ad un puntatore a char ed il casino è assicurato.
Per fare ciò che dici tu devi scrivere accordo[indice]=x;
Per recuperare il nome dell'accordo puoi fare un secondo array "allineato" al primo, oppure definire una struttura che contiene tutte le informazioni associate all'accordo (nome, note, ottava etc etc) e fare un array di struct.
Per quanto la sintassi è esattamente come se scrivessi nel file .ino principale dive poi andrai a richiamare il file.h con un #include
Esatto. Guarda l'esempio che ho linkato più su, ho modificato per includere da un file esterno ed ho aggiunto anche alcuni array in setup() per provare a farti capire perché non puoi usare la forma
accordo = quello_che_ti:pare
con gli array (ovvero senza parentesi quadre ).
Il casting ad (int) server per la Serial.println()
Perfetto, appena sarò da PC gli di un occhio bene.
Quindi mi sembra di capire che con gli Array ci vogliono mille precauzioni e poi mi servirebbero dei puntatori ecc..
Posso chiederti quale sarebbe la sintassi nel file .h?
Non riesco a capire cosa intendi con sintassi... Forse ti riferisci a come vengono scritte librerie e classi?
Si tratta di C++, proprio come per il file .ino
Quando metti un #include "nomeFile.h" è più o meno come se dici al compilatore "prendi il testo contenuto nel file nomeFile.h e mettilo qui" quindi la sintassi deve essere esattamente la stessa.
No è che io l'unico file di supporto di tipo h che ho mai usato è un file in cui vengono definite una sfilza di variabili con la sintassi:
#define nome_variabile1 valore
#define nome_variabile2 valore
#define nome_variabile3 valore
Quindi ha una sintassi diversa dalla dichiarazione di variabili all'interno del file .ino
Non ha segni di uguaglianza ne punti e virgola.
Vorrei continuare ad usare questo tipo di file h per dichiarare le variabili in un file dedicato visto che sono "tante".