While, problemino...

Vorrei che 4 valori float siano maggiori di 40 contemporaneamente, finché non lo sono si devono ripetere una serie di istruzioni (che per semplificare non ho messo). Questo è ciò che ho fatto:

while((disE[1] > 40) && (disE[2] > 40) && (disE[3] > 40) && (disE[4] > 40)){

istruzioni;

}

Nonostante alcuni di questi valori sono minori di 40 non entra nel while, cosa sbaglio?

grazie 1000 in anticipo :D

Per come la hai scritta, rimane nel while quando quei valori sono tutti > 40, esattamente l’opposto di quello che volevi.
while (condizione) {blocco istruzioni}
rimane dentro il {blocco istruzioni} quando (condizione) è TRUE. Se uno o più dei tuoi valori sono < 40, la tua (condizione) è FALSE.
Riscrivila correttamente!

while((disE[1] < 40) || (disE[2] < 40) || (disE[3] < 40) || (disE[4] < 40)) {

 <istruzioni>;

}

Ho risolto grazie 1000! =D

poi disE[] é un array di 5 elementi o di 4? Ciao Uwe

uwefed: poi disE[] é un array di 5 elementi o di 4? Ciao Uwe

a dire il vero gli elementi sono 6, in quella riga di codice mi servivano solo i primi 4. Per star tranquillo per le dimensioni dell'array l'ho dichiarato così:

float disE[10];

Anche se probabilmente mi bastava farlo più piccolo...

a dire il vero gli elementi sono 6, in quella riga di codice mi servivano solo i primi 4.

Non sono i primi 4 perché un array incomincia con l'indice 0 ovvero array[0] .

Se l' indice supera il numero di elementi del array non ricevi nessun messaggio di errore ma semplicemente i dati scritti sovrascrivono quello che nella RAM si trova dopo il array provocando cose strane e inspiegabili.

Ciao Uwe

In questo caso ti funzionerà, infatti hai applicato il "nel dubbio, abbondiamo" e l'hai dimensionato [10], adoperando gli elementi [1], ..., 6.

Ma per il futuro tieni ben presente il suggerimento di uwefed, altrimenti potresti avere quei famosi malfunzionamenti strani.

Come info, piccola macro che “calcola” in fase di precompilazione dimensione di un array monodimensionale:

#define ARRDIM(v)  (sizeof((v)/sizeof((v[0]))
...
long myArr[10];
...
for(int i=0;i<ARRDIM(myArr);i++) 
{ ...

Occhio che sizeof(myArr) ritorna 10 * dimensione di un long → quindi su Arduino 10*4=40 byte e non il valore 10
Invece ARRDIM(myArr) calcola 10