Array dentro uno specifico void non funziona

Salve a tutti,

problema semplice che non riesco a risolvere.
Se pongo l'array nel void loop funziona a dovere e il serial monitor scrive 0 1 1.

int partenze[3]; 

void setup() {
  
Serial.begin(9600);  
}

void loop() {
  
int partenze[]={0,1,1};
  
    Serial.println(partenze[0]);
    Serial.println(partenze[1]);
    Serial.println(partenze[2]);
    Serial.println("-------------");
    delay(100);
}

Se lo pongo all'interno di un void non funziona ed il serial monitor scrive 0 0 0.

int partenze[3]; 

void setup() {
  
Serial.begin(9600);  
}

void loop() {
  
    recupera();
  
    Serial.println(partenze[0]);
    Serial.println(partenze[1]);
    Serial.println(partenze[2]);
    Serial.println("-------------");
    delay(100);
}

void recupera(){
int partenze[]={0,1,1};
}

Come mai ?
Grazie

ciao Zamundo,

penso perchè tu dichiari si una int partenze come globale ma anche una locale in recupera()...prova a togliere int da quest'ultima...

Secondo le sono due variabili diverse, stampi quella vuota
Metti i Print dentro partenze

Alessa' ... ancora non t'è chiara la differenza tra variabili LOCALI e GLOBALI ? ? ? :o

Siamo messi maluccio eh ! :smiling_imp: :smiling_imp: :smiling_imp:

Leva quella dichiarazione di array in recupera() e assegna ad ogni elemento, che già esiste globale, il suo valore.

Guglielmo

Guglielmo sempre delicato! :slight_smile: Ah Ah

Evidentemente ho l'esigenza di assegnare una grande serie di array in base al verificarsi di alcuni parametri.

Mi spiego: quello che ho postato è solo un esempio di 3 variabili.
In realtà devo assegnare 12 variabili diverse per un verificarsi di 52 condizioni.
Non vorrei scrivere partenze [1] = 1 o 0 .... per 624 possibilità !
In pratica ho:

void assegna(){
if(settimana >=1  &&  settimana <=2){int partenze[]={1,0,0,0,1,1,1,1,1,1,1,0};} 
if(settimana >=2  &&  settimana <=3){int partenze[]={0,1,1,0,1,1,1,1,1,1,1,1};} 
if(settimana >=3  &&  settimana <=4){int partenze[]={1,0,0,0,1,1,1,1,0,1,1,1};} 
}

Devo variare l'array "partenze" dentro ad un void richiamato dal loop. Come posso fare ?

PS E poi, scusa, cosa cambia fra locale e globale nel mio post iniziale ? Semplicemente anzicchè essere nel loop principale è all'interno di un void richiamato !

NON SI CHIAMANO VOID, SI CHIAMANO FUNZIONI!!!

Io questa cosa proprio non la sopporto :(.

Quel tipo di inizializzazione, che è appunto una INIZIALIZZAZIONE, si può fare solo contestualmente alla dichiarazione. Successivamente occorre assegnare un elemento alla volta.

Nel tuo caso puoi tenere N array diversi + 1 di "lavoro" e copiare tutti gli elementi da quello corretto a quello di lavoro.

Grazie SukkoPera,

la tua idea dell'array di lavoro in cui copiare i valori degli altri array è molto buona.

Un salutone

PS Come siete suscettibili stamane :smiley:

Zamundo:
PS Come siete suscettibili stamane :smiley:

SI, molto ... specie quando si presentano con certe domande persone che sono anni che seguono il forum ... :smiling_imp:

Guglielmo