Lettura e scrittura di dati in seriale con l'uso delle funzioni
Quest'esercitazione prevede che abbia già un po' di familiarità con la porta seriale.

Nel caso specifico si vuole comandare l'accensione e lo spegnimento di led posizionato sul piedino 13 scrivendo rispettivamente "1" e "0" sulla prima riga del monitor seriale premendo poi il tasto "Send" o "Invia" a seconda della lingua impostata.
N.B. È necessario disattivare l'inserimento dei caratteri di fine riga che vengono inviati quando alla fine dell'inserimento viene premuto il tasto "invio".
Lo sketch da caricare è il seguente:
#define ledpin 13
// the setup function runs once when you press reset or power the board
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(ledpin, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
if (Serial.available() > 0){
EseguiComandoSeriale();
}
}
// funzioni
void EseguiComandoSeriale(){
char inputByte = Serial.read();
while (Serial.available() > 0) Serial.read(); // svuoto buffer
switch (inputByte){
case '1': // se in seriale c'è "1" accendo il led
digitalWrite(ledpin, HIGH);
Serial.println("Led acceso");
break;
case '0': // se in seriale c'è "0" spengo il led
digitalWrite(ledpin, LOW);
Serial.println("Led spento");
break;
default:
Serial.println("Comando errato");
}
}Il listato merita qualche spiegazione.
In primo luogo si nota che la gestione dei dati in arrivo dalla seriale viene eseguita dalla funzione EseguiComandoSeriale( ) che viene richiamata ogni volta che la funzione Serial.available( ) restituisce un valore maggiore di 0.
Nota: la funzione Serial.available( ) restituisce il numero di caratteri presenti nel buffer di ricezione della porta seriale di Arduino.
Qualora vi sia un dato in seriale viene eseguita la funzione di controllo EseguiComandoSeriale( ) nella quale la prima riga è:
char inputByte = Serial.read();
Che ha l'effetto di caricare nella variabile inputByte (della dimensione di 1 carattere pari a 8 bit) il primo valore presente nel buffer di ricezione della porta seriale.
Nota: Un buffer è una zona di memoria usata per compensare differenze di velocità nel trasferimento o nella trasmissione di dati.
La successiva linea di codice:
while (Serial.available() > 0) Serial.read();
ha l'effetto di svuotare il buffer di ricezione nel caso di invii multipli di dati tramite il terminale di controllo.
Per finire il comando switch ha il compito di interpretare i dati che arrivano e svolgere le operazioni necessarie.