istruzione for

sto leggendo il libro primi passi con arduino e mi sono imbattuto nell istruzione for nel libro da una veloce spiegazione e nn ho capito a cosa serve
nell esempio ce for(int i=0;i<7;i++
io ho capito che i è una variabile sul pin 0
se i è minore di 7 ripeti il programma nelle parentesi graffe
ho capito bene? credo di no e se apposta di i ++ ci fosse i-- e se al posto di i ci fosse per es r che significherebbe?tante domande ma ho voglia di imparare
per favore spiegatemi cosa fa for in modo facile, il libro è fatto bene in 2 giorni riesco ad usare meglio arduino pero questo for nn lo riesco a capire

No. "i" è una variabile usata come contatore per il ciclo for. La traduzione di quella riga sarebbe: conta da 0 a 7 a passi di 1. Il blocco di codice all'interno delle graffe che delimitano il for saranno eseguite tante volte quant'è l'indicazione data dal ciclo; inoltre il blocco di codice delimitato dal for potrà usare la variabile "i" per vari calcoli. Ad esempio, visto che "i" scorre, si può usare per indicizzare progressivamente un array.

for ripete ciò che ha tra le parentesi graffe finchè la variabile che hai dichiarato subito dopo aver aperto la parentesi soddisfa la condizione tra i due punti e virgola. Il metodo di aggiornamento della variabile è definito dall’ultima espressione dentro le parentesi tonde. In pratica i oppure quello che vuoi tu (quindi anche r o pincopallino) sono contatori che vengono incrementati di 1 (i++) finchè è vera la condizione (nel tuo caso i<7).
La condizione di aggiornamento si può cambiare e non è detto che sia l’incremento di 1. Anche la condizione di verifica è libera.

michaelferrara:
sto leggendo il libro primi passi con arduino e mi sono imbattuto nell istruzione for nel libro da una veloce spiegazione e nn ho capito a cosa serve
nell esempio ce for(int i=0;i<7;i++
io ho capito che i è una variabile sul pin 0

La for( ; ; ) è una istruzione per creare un ciclo con durata prestabilita, non c’entra nulla con i pin, la sua struttura è:

Inizializzazione della variabile di controllo;
Verifica limite conteggio;
Incremento.

Se scrivi for(i=0;i<7;i++) vuol dire che la variabile i viene inizializzata col valore 0, viene verificato che il suo valore non supera 7 e i viene incrementata di 1 ad ogni ciclo.
In pratica con quella riga crei un ciclo che effettua sette iterazione, questo perché nel primo ciclo i=0 e nell’ultimo i=6 dato che il limite è dato da i<7, da 0 a 6 sono sette cicli perché si conta anche il ciclo 0.
Se al posto di i++ metti i-- i viene decrementata di 1 ad ogni ciclo e, ovviamente, devi inizializzarla e predisporre il controllo opportunamente, p.e. for(i=7;i>0;i++), la parte dove definisci l’incremento (i++) in realtà può essere qualunque espressione matematica valida, p.e. “i+10” per ottenere uno step 10 oppure “i*5”, etc.

Oltre FOR esistono i cicli WHILE e DO WHILE. --> http://www.html.it/pag/15405/controlli-iterativi-while-for-break/

Potresti fare anche un ciclo con una Label e un IF GOTO, ma verresti bannato a vita dal forum di Arduino. :grin: :grin: ]:D Scherzo!! (ma anche no)

PaoloP: Potresti fare anche un ciclo con una Label e un IF GOTO, ma verresti bannato a vita dal forum di Arduino. :grin: :grin: ]:D Scherzo!! (ma anche no)

Verresti bannato te, che gli hai dato questi consigli malsani! ]:D

ho capito che i è una variabile su un piedino es A0 se il la variabile è minore di 7 ripeti quello nelle parentesi questa è la prima cos la seconda ipotesi è che visto che loop è un ciclo infinito il programma contenuto in for viene eseguito solo un numero di volte in questo caso minore di 7 cos è la verifica del limite di conteggio? mi fate un esempio di programma con l uso di for con relativa spiegazione per piacere 9 capitoli nessun intoppo ora me ne sto creando uno io questo for forse non mi serve e nn mi servira (forse) ma se nn capisco a cosa serve questo for nn riesco ad andare avanti

Ad esempio puoi fare un ciclo per accendere 10 led.
Invece di scrivere

digitalwrite(1, HIGH);
digitalwrite(2, HIGH);
digitalwrite(3, HIGH);
digitalwrite(4, HIGH);
digitalwrite(5, HIGH);
digitalwrite(6, HIGH);
digitalwrite(7, HIGH);
digitalwrite(8, HIGH);
digitalwrite(9, HIGH);
digitalwrite(10, HIGH);

puoi scrivere

for( int x=1; x<=10; x++)
{
  digitalwrite(x, HIGH);
}

Il ciclo FOR inizializza un variabile di tipo int e nome x e le assegna il valore 1
Esegue il ciclo e quindi il comando digitalwrite(x, HIGH); che è quindi digitalwrite(1, HIGH);
Controlla se la variabile è minore o uguale a 10 e siccome non lo è (1<10) incrementa x di 1 con x++.
Rinizia il ciclo FOR dove adesso x vale 2 e cosi finché non vale 10 (compreso perché c’è l’uguale).
Quando dopo l’incremento x vale 11 esce dal ciclo (perche la condizione non è più vera 11>10) e quindi non esegue il comando digitalwrite(11, HIGH); che infatti non ci interessa.
In pratica con poche righe di codice esegue 10 comandi come quelli scritti sopra sfruttando la variabile x al posto del numero del pin.

I cicli (FOR, WHILE e DO WHILE) e le iterazioni (IF ELSE e SWITCH CASE) sono alla base del linguaggio C, anche se nei tuoi programmi non le userai (e ne dubito) non puoi non conoscerle. :blush:

@ michaelferrara : Prova a guardare lo schemino che ti allego … esso è totalmemte indipendete da digitalWrite, digitalRead e altre cose … e solo uno schema a blocchi di come funziona una for.

Guglielmo

@tutti gli altri : nun rompete, la terminologia nello schemino non è rigidamente quella che dovrebbe essere … lo so, ma serve a fargli entrare in testa che d’è un ciclo di for XD XD XD

allora questo sketch significa che tone è nota+501 cioe in un ciclo è 50/0 l altro 501 fino a 7 modificando ogni volta la frequenza

for (int i=0;i<7;i++)
{tone (buxxer,(nota+(50*i)));
delay 10 ;}

ma se invece di i++ ci fosse i-- invece di aumentare decrescerebbe giusto
si potrebbe anche usare per dare delle precise sfumature ai led rgb
ma i=0 puo essere sostituito da i= analogRead
perche se è una variabile “fissa” perche a 0 nn cambia a cosa serve fare i<7 che lo sai che i è minore di 7
mi sto rendendo conto di essere un po ossessivo e duro di mente ho capito quasi a cosa serve questo for ma alcuni dettagli nn li ho capiti se i è minore di 7 salta il programma ma se i è sempre 0 nn lo saltera mai o sbaglio

mi date un qualcosa da fare con l utilizzo di for e poi se nn riesco mi date una mano sembra di stare a scuola ma quando una cosa nn si capisce :blush: :blush: :0 :0

michaelferrara: ...i se i è minore di 7 salta il programma ma se i è sempre 0 nn lo saltera mai o sbaglio

Se hai visto bene lo schemino .. I viene inizializzato ad un valore UNA SOLA VOLTA ... (es. I = 0) poi, nel ciclo non viene più inizializzato, ma solo alterato con una operazione (es I++ che un incremento) e, quando la condizione di uscita NON è più soddisfatta ... esci dal ciclo.

Vuoi fare un esercizio con il for ? Calcolare la somma di tutti i numeri interi da 50 a 100 ...

Buon divertimento :grin:

Guglielmo

una cosa simile a questa

void setup(){}
void loop(){
  for(int illl=50;illl<=100;illl++){
  Serial.begin(9600);
  Serial.print (illl);
  delay (1000);}}

Allora ...

  1. L'inizializzazione della seriale ( Serial.begin() ) falla nel setup() è totlamente inutile ripeterla in un ciclo !!!

  2. Ehi ... ma stai barando ... li stampi solo i numeri interi da 50 a 100 .. non la loro somma XD XD XD

Guglielmo

int n=illl*ill serial print n

michaelferrara: int n=illl*ill serial print n

Scusa ??? :astonished: :astonished: :astonished:

Cosa sarebbe ??? Cosa è ill ??? Una nuova variabile ? e cosa c'entra con la SOMMA dei numeri ?

Guglielmo

michaelferrara:
allora questo sketch significa che tone è nota+501 cioe in un ciclo è 50/0 l altro 501 fino a 7 modificando ogni volta la frequenza

for (int i=0;i<7;i++)

{tone (buxxer,(nota+(50*i)));
delay 10 ;}




ma se invece di i++ ci fosse i-- invece di aumentare decrescerebbe giusto
si potrebbe anche usare per dare delle precise sfumature ai led rgb
ma i=0 puo essere sostituito da i= analogRead 
perche se è una variabile "fissa" perche a 0 nn cambia a cosa serve fare i<7 che lo sai che i è minore di 7 
mi sto rendendo conto di essere un po ossessivo e duro di mente ho capito quasi a cosa serve questo for ma alcuni dettagli nn li ho capiti se i è minore di 7 salta il programma ma se i è sempre 0 nn lo saltera mai o sbaglio

Se vuoi partire da un valora alto e arrivare a un vaolre basso puoi anche usare i–.
esempio

for( i=10; i>0; i--)
{
}

Puoi anche far dipendere la vriabile da altre come per esempio

int a=5;
int B=10; 
int c= 50;

for (i=B; i<c; I+=a)
{}

il for ha 3 parti:
for( inizio ; controllo ; incremento)
nel inizio dai un valore alla variabile che usi nel for
nel controllo controlli se la condizione é vera
nel incremento cambi la variabile Tutte le possibilitá matematiche sono permesse.

al posto di

for (i=0; i<7;i++)
{
fai qualcosa;
}

puoi scrivere

i=0;
if (i<7)
{
fai qualcosa;
i++;
}

Ciao Uwe