L'iterazione definita è molto più articolata da codificare in quanto sono previste diverse possibilità che rendono questa istruzione particolarmente comoda: ricordiamo che può essere utilizzata solo quando conosciamo a priori il numero di volte che il ciclo deve essere eseguito.

La sintassi da inserire nel blocco che esegue l'iterazione a conteggio è composta da tre parti e ciascuna di esse è una istruzione che ha come "protagonista" una variabile, chiamata variabile di conteggio:

  1. inizializzazione della variabile che effettua il conteggio: X = 1 (valore iniziale del contatore);
  2. condizione che fa ripetere il ciclo: x <= 5 (valore finale del contatore);
  3. aggiornamento della variabile di conteggio che viene fatto a ogni ripetizione: x = x + 1 (incremento o passo).

Queste tre operazioni vengono eseguite ogni volta che il ciclo viene ripetuto.

Vediamo come si può utilizzare il ciclo FOR con arduino: il blocco di istruzioni che accende e spegne il LED è scritto una sola volta, ma viene eseguito per tre volte, che corrispondono al numero di incrementi della variabile cont per arrivare da 1 a nlamp=3. Si noti che, modificando il valore della costante nlamp, si può variare il nu mero dei lampeggi.

const int nLamp=3; // n° di lampeggi = 3
const int timer1 = 200; // tempo di ritardo 200 ms
const int timer2 = 2000; // tempo di ritardo 2 s

void setup() {
pinMode(13, OUTPUT); // inizializza il pin 13 come uscita
}

void loop() {

/*
Ciclo FOR: le istruzioni tra le graffe sono eseguite nLamp=3 volte, cioè
finchè la variabile "cont", inizializzata a 1 e incrementata
di 1 ad ogni ciclo, risulta minore o uguale a nLamp=3
*/

for(int cont = 1; cont <= nLamp; cont++){
digitalWrite(13, HIGH); // poni a livello ALTO il pin 13 (LED ON)
delay(timer1); // attendi 200 ms
digitalWrite(13, LOW); // poni a livello BASSO il pin 13 (LED OFF)
delay(timer1); // attendi 200 ms
}
delay(timer2); // pausa di 2 s dopo i tre lampeggi
}

 

1.A Lampeggio complesso

Far lampeggiare il LED sulla scheda Arduino, con una sequenza ciclica di 1, 2,3 lampeggi veloci, intervallati da pause di 2 s.

Soluzione

Per contare il numero dei cicli e il numero dei lampeggi crescenti all'interno di ogni ciclo, devi impiegare due FOR uno dentro l'altro (nidificati):

  • nel FOR esterno la variabile ciclo si incrementa da 1 a naLmpMax, inizializzato al valore 3, quindi ciclo conta i 3 cicli di lampeggi;
  • nel FOR interno la variabile cont si incrementa da 1 al valore corrente di ciclo; quindi conta il numero di lampeggi da effettuare in quel ciclo.

Modificando il valore di nlampMax (numero massimo di lampeggi) si può variare il ciclo dei lampeggi, ad esempio ponendo nLampmax=5, si ottiene una sequenza di 1, 2, 3, 4, 5 lampeggi.

/*
Lampeggio complesso
Cicli di 1, 2, 3 lampeggi (con 2 FOR nidificati)
*/
const int nLampMax = 3; // n° massimo di lampeggi
const int timer1 = 200; // tempo tra le commutazioni degli impulsi (200 ms)
const int timer2 = 2000; // pausa tra ogni serie di impulsi (2 s)

void setup() {
pinMode(13, OUTPUT); // inizializza il pin 13 come uscita
}

void loop() {
/*
Due FOR nidificati:
- nel FOR esterno, la variabile "ciclo", che varia da 1 a nLampMax=3, contiene il
numero del ciclo, corrispondente al numero di lampeggi da effettuare in quel ciclo
- nel FOR interno, la variabile "cont" conta i lampeggi all'interno del ciclo
- al termine di ogni ciclo di lampeggi (1, 2, 3) c'è una pausa di 2 s
*/

for (int ciclo = 1; ciclo <= nLampMax ; ciclo++) { // FOR esterno
for (int cont = 1; cont <= ciclo ; cont++) { // FOR interno

digitalWrite(13, HIGH); // poni a livello ALTO il pin 13 (LED ON)
delay(timer1); // attendi 200 ms
digitalWrite(13, LOW); // poni a livello BASSO il pin 13 (LED OFF)
delay(timer1); // attendi 200 ms
}
delay(timer2); // pausa di 2 s al termine di ogni ciclo di lampeggi
}
}