domanda da stupido....

perchè un ciclo for scritto così non funziona?

   for ((int) x=30 ; x=0; x--) {
     Serial.println(x);
   }

e uno così si

   for ((int) x=30 ; x>=0; x--) {
     Serial.println(x);
   }

Perchè nel primo caso stia dicendo
per tante volte quante (in intero di nome s che inizia da trenta;lo rendi uguale a zero;agisci e fallò scendere di uno).
come vedi non ha molto senso
Mentre la seconda volta dici
Per tante volte quante (Un intero di nome s che inizia da trenzpta;è maggiore o uguale a 0;agisci e fallo scendere di uno)
E questo ha senso

:smiley: ci vuole il doppio ==

l'ho detto che era da stupido
mannaggia ai confronti

Neanche.
Con il doppio = sarebbe subito dal so, gli dici prima che è 30, ma poi deve essere 0 per fare qualcosa.

si provato non funziona infatti

for (initialization; condition; increment) {
//statement(s);
}

The initialization happens first and exactly once. Each time through the loop, the condition is tested; if it’s true, the statement block, and the increment is executed, then the condition is tested again. When the condition becomes false, the loop ends.

la condizione di controllo deve essere vera perchè venga eseguito il blocco tra le graffe

Come dice silente, il primo caso non ha molto senso, lo metti 30 e lo riporti a 0 nello stesso ciclo for, quindi la funzione non ha molto senso

Attenzione che se scirvi for ((int) x=30 ; x=0; x--) , non stai dichiarando una variabile x, ma fai un cast stile c, una conversione di tipo, per dichiarare una variabile locale deve essere for (int x=30 ; x=0; x--)

no torn24 nel ciclo for il secondo argomento è la condizione che fino a che è vera permette di eseguire il blocco all'interno delle graffe
for (int x=30 ; x=0; x--)

non funziona perchè la x viene posta = a 30 e poi si controlla se è = a 0.... essendo falsa la condizione il ciclo non viene eseguito. A prescindere dalla dichiarazione sbagliata della variabile (avevo preso il pezzo da una discussione e non avevo fatto caso all'int tra parentesi)

Intendo dire

non si dichiara una variabile (int) x, non stai facendo una dichiarazione ma un cast.

per dichiarare una variabile x, devi fare int x.

Ovvio che la condizione deve essere vera, ho fatto un copia e incolla, evidenziando solo l'errore di dichiarazione della variabile.

Patrick_M:
non funziona perchè la x viene posta = a 30 e poi si controlla se è = a 0.... essendo falsa la condizione il ciclo non viene eseguito

Non è un test, ma una assegnazione, che "vale" il valore assegnato
X viene posto a 30 , poi a 0 e 0 viene usato come condizione
Dopo trovi che x vale 0 e il ciclo non viene mai eseguito, nemmeno l'auto decremento (altrimenti troveresti meno uno)

si, è così.
il mio dubbio/cruccio è che non puoi fare un confronto con un termine d'arrivo preciso a mo del vecchio ciclo for di basica memoria in cui davi un punto di partenza e uno di arrivo e il decremento/incremento. Qui devi sempre dirgli
<, >, <= o >= del valore finale. La sola uguaglianza non è accettata
:smiley: me ne farò una ragione :smiley:

La sola uguaglianza no, ma il punto preciso si
Metti come condizione il test not equal (x!=0)