If (se)
L’istruzioni if verifica se una certa condizione è stata raggiunta, come ad esempio un valore analogico al di sopra di un certo numero. Se l’espressione è vera lo sketch esegue le istruzioni che seguono. Se falso il programma ignora la dichiarazione. Un esempio:
if (someVariable == value)
{
esegui etc.;
}
L’esempio precedente compara (l’operazione di confronto è eseguita dall’istruzione ==) someVariable al valore contenuto in value, che può essere una variabile o una costante. Se l’operazione di confronto, o la condizione tra parentesi risulta vera, le istruzioni contenute all’interno delle parentesi graffe vengono eseguite. In caso contrario, il programma salta su di loro e continua dopo le parentesi graffe.
Nota: Attenzione all’uso accidentale del simbolo dentro le parentesi dell’istruzione if ‘=’, infatti (x = 10), tecnicamente è un’operazione valida, infatti assegna alla variabile x il valore 10 ed è di conseguenza una condizione sempre vera, per cui lo sketch si comporta in modo diverso da come ci si aspettava. Occorre usare invece il doppio uguale ‘==’, infatti (x == 10), esegue il confronto tra la variabile e il valore, cioè confronta solo e soltanto se x è uguale al valore 10. Occorre pensare a ‘=’ come “assegna a” e ‘==’ a “confronta con”.
if … else
La struttura if … else è utilizzata per verificare determinate condizioni e quindi eseguire decisioni. Se l’espressione contenuta all’interno delle parentesi tonde è vera, viene eseguito il codice di programma che segue. Se l’espressione è falsa vengono eseguite le righe di codice subito dopo l’istruzione else. Un esempio:
#define Acceso 1 // definisce Acceso = 1
#define Spento 0 // definisce Spento = 0
if (pulsante == ON)
{
digitalWrite (rele, acceso);
}
else
{
digitalWrite(rele, spento);
}
Altro esempio, se si vuole testare un ingresso digitale, se è HIGH o LOW, si può scrivere:
if (inputPin == HIGH)
{
doThingA;
}
else
{
doThingB;
}
Si possono scrivere condizioni if annidate una dentro l’altra o condizioni multiple. Attenzione: solo una serie di dichiarazioni verrà eseguito a seconda della condizione posta nello sketch.
L’istruzione else if permette di fare la scelta tra più condizioni.
If (inputPin <500)
{
esegui A;
}
else if (inputPin> = 1000)
{
esegui B;
}
else
{
esegui C;
}
Ricapitolando, il flusso del programma può eseguire una parte di codice oppure no (nel caso del solo if), di fare una scelta tra due parti di codice (nel caso di If – else) o di fare una scelta tra più parti di codice (nel caso di if – else if – else).
For
Il for viene utilizzato per ripetere un blocco di istruzioni racchiuso tra parentesi graffe un determinato numero di volte. Viene utilizzato un contatore per incrementare e terminare il ciclo. Esso è composto da tre parti, separate da punto e virgola (;):
for (inizializzazione; condizione; espressione)
{
esegui A;
}
Esempio:
for (int A = 0; A < 10; A++)
{
esegui le istruzioni;
}
Al comando for segue una parentesi tonda. Il contenuto all’interno della parentesi definisce quante volte deve essere ripetuto il blocco di programma contenuto dentro le parentesi graffe.
int A = 0
Definisce la variabile di tipo intero e viene impostata con un valore iniziale uguale a zero. L’inizializzazione di una variabile locale, o contatore di incremento, avviene all’inizio e viene definita una volta sola.
A < 10
Specifica che finché la variabile A è minore di 10 il ciclo for viene ripetuto perché la condizione è vera, pertanto vengono eseguite le istruzioni contenute all’interno delle parentesi graffe.
A++
Incrementa la variabile A di una unità. Il significato è uguale a scrivere A=A+1.
Quando la variabile assume il valore di 10, quindi la condizione diventa falsa, il ciclo termina.
Nell’esempio seguente viene inizializzata la variabile i definita come int e posta uguale a 0; viene avviato il ciclo per vedere se i è ancora inferiore a 20 e finché non risulta vera, la variabile i viene incrementata di 1 e vengono eseguite le istruzioni racchiuse tra parentesi graffe:
for (int i = 0; i <20; i ++) // dichiara i, controlla se i è meno di 20, incrementa i di 1
{
digitalWrite (13, HIGH); // abilita il pin 13 come uscita alta
delay (250); // pausa per 1/4 di secondo
digitalWrite (13, LOW); // abilita il pin 13 come uscita bassa
delay (250); // pausa per 1/4 secondo
}
Nota: Nel linguaggio C il ciclo for è molto più flessibile rispetto ai cicli che si trovano in altri linguaggi di programmazione, incluso il BASIC.
Qualsiasi o tutti e tre gli elementi di intestazione possono essere omessi, anche se i punti e virgola sono obbligatori.
Le dichiarazioni per l’inizializzazione, la condizione e l’espressione possono essere sostituiti da valide istruzione di linguaggio C utilizzando delle variabili indipendenti. Questo uso è piuttosto insolito ma può essere utilizzato per delle rare soluzioni ad alcuni problemi di programmazione.
While
È un comando simile a If.
Il ciclo while esegue all’infinito le istruzioni racchiuse tra le parentesi graffe fino a quando la condizione racchiusa dentro le parentesi tonde diventa falsa.
Qualcosa deve far cambiare la variabile in esame, o il ciclo while non potrà mai uscire. Questo potrebbe essere scritto nel codice, come ad esempio una variabile che viene incrementata, o una condizione esterna, come il dato proveniente da un sensore.
while (someVariable? value)
{
doSomething;
}
L’esempio seguente controlla se la varabile ‘someVariable’ è inferiore a 200 e se è vera esegue le istruzioni all’interno delle parentesi e continuerà all’infinito finché la variabile ‘someVariable’ non diventa maggiore o uguale a 200.
while (someVariable <200) // verifica se meno di 200
{
doSomething; // esegue le istruzioni racchiuse tra le parentesi graffe
someVariable++; // la variabile viene incrementata di una unità
}
Do … while
Il ciclo do … while si comporta come l’istruzione while ma con una importante differenza: esegue almeno una volta l’istruzione all’interno del ciclo do-while. Quindi viene usato quando si vuole che il codice dentro le parentesi graffe venga eseguito almeno una volta prima di verificare la condizione.
do
{
doSomething;
} while (someVariable ?? value);
L’esempio seguente assegna il valore di readSensors () alla variabile ‘x’, si ferma per 50 millesimi di secondo, poi inizia il ciclo fino a quando ‘x’ è meno di 100:
do
{
x = readSensors(); // assegna il valore di readSensors() a x
delay (50); // pausa di 50 milliseconds
} while (x < 100); // inizia il ciclo finché x è minore di 100
Altro esempio
do
{
digitalWrite(13,High);
delay(100);
digitalWrite(13,High);
delay(100);
sensorValue= analogRead(1);
} while (sensorValue < 512);