Errori comuni nell’uso di Arduino – utilizzo dell’operatore ++

Nella “Lezione 2 – Corso di Elettronica Creativa con Arduino Sensor Kit” ho promesso che avrei fornito alcuni esempi pratici sull’utilizzo dell’operatore “++” come prefisso e come suffisso nell’incremento di una variabile. Durante la correzione delle esercitazioni dei miei studenti noto che la posizione del “++” crea qualche confusione, quindi ho pensato di inserire questa spiegazione nella sezione “Errori comuni nell’uso di Arduino”.

Esempio 1: “++variabile” (incremento come prefisso)

Questo sketch dimostra come il valore della variabile viene incrementato prima di essere stampato sulla Serial Monitor.

1// Prof. Maffucci Michele
2// utilizzo del ++ come prefisso
3 
4void setup() {
5  Serial.begin(9600);  // Avvia la comunicazione seriale a 9600 bps
6}
7 
8void loop() {
9  int conteggio = 0;
10  Serial.println("Incremento come prefisso:");
11  for(int i = 0; i < 5; i++) {
12    Serial.print("Valore attuale di conteggio: ");
13    Serial.println(++conteggio);  // Stampa il valore di conteggio dopo essere stato incrementato
14    delay(1000);                  // Attendi un secondo tra ogni iterazione
15  }
16  Serial.println("Fine del ciclo");
17  while(true);  // Termina il loop per evitare ulteriori incrementi
18}

Nell’Esempio 1, vedrete che i valori stampati iniziano da 1 e arrivano fino a 5, perché l’incremento avviene prima della stampa del valore di conteggio.

Esempio 2: “variabile++” (Incremento come suffisso)

Questo sketch illustra come il valore della variabile sia stampato prima di essere incrementato.

1// Prof. Maffucci Michele
2// utilizzo del ++ come suffisso
3 
4void setup() {
5  Serial.begin(9600);  // Avvia la comunicazione seriale a 9600 bps
6}
7 
8void loop() {
9  int conteggio = 0;
10  Serial.println("Incremento come suffisso:");
11  for(int i = 0; i < 5; i++) {
12    Serial.print("Valore attuale di conteggio: ");
13    Serial.println(conteggio++);  // Stampa il valore corrente di conteggio, poi lo incrementa
14    delay(1000);                  // Attendi un secondo tra ogni iterazione
15  }
16  Serial.println("Fine del ciclo");
17  while(true);  // Termina il loop per evitare ulteriori incrementi
18}

Nell’Esempio 2, i valori stampati iniziano da 0 e arrivano a 4, poiché l’incremento avviene dopo la stampa del valore.

Esempio 3: alternanza tra incremento come prefisso e suffisso

L’esempio che segue utilizza un contatore che aumenta ogni secondo e un messaggio che mostra sulla Serial Monitor il valore del contatore prima e dopo l’incremento, alternando tra incremento come prefisso e suffisso.

1// Prof. Maffucci Michele
2// utilizzo del ++ come suffisso
3 
4int contatore = 0;
5bool usaPrefisso = true// Flag per alternare tra incremento prefisso e suffisso
6 
7void setup() {
8  Serial.begin(9600);  // Inizia la comunicazione seriale a 9600 bps
9}
10 
11void loop() {
12  Serial.println("Inizio del ciclo");
13  if (usaPrefisso) {
14    Serial.print("Incremento come prefisso - Valore prima dell'incremento: ");
15    Serial.println(contatore);
16    Serial.print("Valore dopo l'incremento: ");
17    Serial.println(++contatore);  // Incremento prima della stampa
18  } else {
19    Serial.print("Incremento come suffisso - Valore prima dell'incremento: ");
20    Serial.println(contatore);
21    Serial.print("Valore dopo l'incremento: ");
22    Serial.println(contatore++);  // Stampa prima dell'incremento
23  }
24 
25// Alterna tra prefisso e suffisso
26  usaPrefisso = !usaPrefisso;
27 
28Serial.println("Fine del ciclo\n");
29  delay(2000);  // Attendere 2 secondi prima del prossimo ciclo
30}

Si noti che nel loop() a ogni iterazione, si decide se usare l’incremento come prefisso o come suffisso, basandosi sul valore del flag “usaPrefisso”. Dopo ogni ciclo, il metodo di incremento viene alternato in questo modo vengono mostrati come i due metodi di incremento influenzano il valore della variabile contatore il cui valore viene stampato sulla Serial Monitor.

Buon Coding a tutti 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.