Seriale
L'introduzione alla comunicazione seriale è su 01_introduzione_Arduino.
Altri comandi utili
Funzione Serial.available
Se ci sono dei dati nel buffer della seriale, Serial.available()
ritorna il numero di byte in coda nel buffer.
Funzione Serial.read
Serial.read()
ritorna il primo byte dal buffer, rimuovendolo dalla coda. Se non ci sono altri elementi nel buffer ritorna -1;
Un esempio riassuntivo
Ecco un esempio che risponde su seriale qualsiasi cosa riceva.
void setup(){
//apre la seriale con baudrate di 9600
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) { // se ho dei caratteri nel buffer della seriale
//leggo il valore, e lo salvo nella variabile tmp
char tmp = Serial.read();
//scrivo il carattere tmp in seriale
Serial.write(tmp);
}
}
Plotter seriale per fare grafici
La seriale si può usare anche per tracciare dei grafici dell'evoluzione di una variabile nel tempo. Questo può essere utile per monitorare l'andamento di un sensore oppure visualizzare delle statistiche.
Se durante l'esecuzione di un programma su Arduino ogni linea della seriale contiene lo stesso numero di valori separati da spazi, quando l'Arduino è connesso al computer è possibile selezionare Strumenti -> Plotter Seriale
nel menù dell'Arduino IDE e visualizzare dei grafici sovrapposti per ogni colonna di valori. Sull'asse x si ha il tempo (o meglio, il numero di linea ricevuta dalla scheda), mentre sull'asse y si hanno i valori assunti dalle varie colonne.
Ad esempio un codice del genere...
void setup() {
Serial.begin(9600);
}
void loop() {
int tempo = millis();
Serial.print(tempo);
Serial.print(" ");
Serial.println(sqrt(tempo));
delay(500); // aspettiamo mezzo secondo prima di ripetere
}
...produrrebbe sulla seriale un output simile al seguente...
12 3.46
512 22.62
1013 31.83
1514 38.91
...
...che quindi produrrebbe due grafici (sovrapposti):
- il primo composto dai punti:
(0, 12)
,(1, 512)
,(2, 1013)
,(3, 1514)
- il secondo composto dai punti:
(0, 3.46)
,(1, 22.62)
,(2, 31.83)
,(3, 38.91)