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 |
4 | void setup() { |
5 | Serial.begin(9600); // Avvia la comunicazione seriale a 9600 bps |
6 | } |
7 |
8 | void 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 |
4 | void setup() { |
5 | Serial.begin(9600); // Avvia la comunicazione seriale a 9600 bps |
6 | } |
7 |
8 | void 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 |
4 | int contatore = 0; |
5 | bool usaPrefisso = true ; // Flag per alternare tra incremento prefisso e suffisso |
6 |
7 | void setup() { |
8 | Serial.begin(9600); // Inizia la comunicazione seriale a 9600 bps |
9 | } |
10 |
11 | void 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 |
28 | Serial.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