Skip to content

for

Il ciclo while è perfetto quando non si sa in anticipo quante volte ripetere qualcosa. Ma spesso il numero di ripetizioni è noto fin dall’inizio:

“Fai lampeggiare il LED 10 volte.” “Stampa i numeri da 1 a 100.” “Esegui questa operazione per ogni elemento di una lista.”

Per questi casi esiste il ciclo for, che raccoglie in una sola riga tutto ciò che serve per gestire un contatore.


// Sintassi:
// for (inizializzazione; condizione; aggiornamento) {
//   istruzioni ripetute
// }

for (int i = 0; i < 5; i++) {
  Serial.println(i);
}
// Stamperà: 0, 1, 2, 3, 4

Le tre parti dentro le parentesi, separate da ;, hanno ciascuna un ruolo preciso:

ParteCosa faQuando viene eseguita
int i = 0Inizializzazione: crea e imposta il contatoreUna volta sola, all’inizio
i < 5Condizione: controlla se continuarePrima di ogni iterazione
i++Aggiornamento: modifica il contatoreDopo ogni iterazione

“5, 4, 3, 2, 1.” La conta ha un punto di partenza (5), una condizione di fine (quando si arriva a 1), e un passo fisso (si aggiunge 1 ogni volta). Il for funziona esattamente così.


Questi due cicli fanno esattamente la stessa cosa:

// Con while:
int i = 0;
while (i < 5) {
  Serial.println(i);
  i++;
}

// Con for (equivalente, ma tutto in una riga):
for (int i = 0; i < 5; i++) {
  Serial.println(i);
}

Il for è preferito quando il numero di iterazioni è noto, perché tiene tutto il meccanismo del contatore in un posto solo, rendendo il codice più leggibile e meno soggetto a errori (come dimenticare l’i++ nel while).


for (int i = 10; i > 0; i--) {
  Serial.println(i);
}
// Stamperà: 10, 9, 8, ..., 1
// Stampa solo i numeri pari da 0 a 10
for (int i = 0; i <= 10; i += 2) {
  Serial.println(i);
}
// Stamperà: 0, 2, 4, 6, 8, 10

i += 2 è una scrittura abbreviata per i = i + 2.

for (int i = 10; i >= 0; i--) {
  Serial.println(i);
  delay(1000);
}
// Stamperà: 10, 9, 8, 7, 6, ... ogni secondo

Esempio Pratico: LED che Lampeggia N Volte

Section titled “Esempio Pratico: LED che Lampeggia N Volte”

Una funzione che fa lampeggiare un LED un numero preciso di volte è un caso d’uso classico del for:

#define LED_PIN 5
int nBlinks;

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
}

void lampeggia() {
  for (int i = 0; i < nBlinks; i++) {
    digitalWrite(LED_PIN, HIGH);
    delay(200);
    digitalWrite(LED_PIN, LOW);
    delay(200);
  }
}

void loop() {
  nBlinks = 3;
  lampeggia();  // Fa lampeggiare il LED 3 volte
  delay(1000);

  nBlinks = 5;
  lampeggia(5);  // Poi 5 volte
}