Lettura e interpretazione di dati inviati ad Arduino tramite seriale
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 void setup() { // initializza la communicatione seriale a 9600 bit per secondo Serial.begin(9600); pinMode(ledpin, OUTPUT); } void loop() { if (Serial.available() > 0){ 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"); } } }
La funzione Serial.available() restituisce il numero di caratteri presenti nel buffer di ricezione della porta seriale di Arduino, quindo ogni volta che la funzione Serial.available() restituisce un valore maggiore di 0, c'è almeno un carattere pronto per essere letto.
Nel resto del codice le righe significative sono
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.