Archivi tag: terminazione istruzione

Errori comuni nell’uso di Arduino – inserimento del punto e virgola alla fine di ogni istruzione

Il punto e virgola è usato come segno di terminazione istruzione, ma non è da usare nelle istruzioni composte: if, for, while, do while e la direttiva per il preprocessore #define.

Di seguito alcuni esempi che mettono in evidenza questo tipico errore.

Versione non corretta

if (temperatura > 25);          // questo punto e virgola non è corretto
{
  digitalWrite (normaleTemp, LOW);
  digitalWrite (allarmeTemp, HIGH);
}

for (int i = 0; i < 15; i++);   // questo punto e virgola non è corretto
  digitalWrite (i, HIGH);

I punti e virgola indicati nell’esempio sopra terminano le istruzioni “if” e “for” e ciò non permetterà l’esecuzione delle istruzioni che sono presenti nel corpo delle rispettive istruzioni.

Versione corretta

if (temperatura > 25)
{
  digitalWrite (normaleTemp, LOW);
  digitalWrite (allarmeTemp, HIGH);
}

for (int i = 0; i < 15; i++)
digitalWrite (i, HIGH);

In questo caso le istruzioni presenti nel corpo della if vengono eseguite se la condizione temperatura>25 è vera, nel secondo caso, nel for, sarà eseguita l’istruzione che segue fino a quando la condizioni<15 risulta vera.

Come si può notare nel for, nel caso in cui sia presente una sola istruzione nel corpo, non è indispensabile inserire le parentesi graffe, non è comunque un errore inserirle e scrivere:

...
for (int i = 0; i < 15; i++)
{
  digitalWrite (i, HIGH);
}

Errore simile viene spesso commesso quando si usa il #define

Versione non corretta

#define PIN_LED 8;    // non bisogna inserire il punto e virgola
#define PIN_LED = 8;  // non bisogna inserire ne = e ne ;

Versione corretta

#define PIN_LED 8

il #define non richiede il punto e virgola.

Possiamo ottenere lo stesso risultato dell’istruzione precedente utilizzando const:

const byte PIN_LED = 8;

Questa scrittura rimane coerente rispetto alla scrittura delle variabili che fa uso dei simboli = e ; ma non efficiente dal punto dello spazio di memoria utilizzata rispetto alla #define.

Buon Coding a tutti 🙂