Arduino Serial Plotter send text

 

Tra le funzionalità implementate dall’IDE Arduino è il Plotter Seriale (menu Strumenti>Plotter Seriale), che possiamo considerare la versione grafica del Serial Monitor; al suo interno è possibile utilizzare “send text” nel caso si desideri variare dei valori nel grafico disegnato. Un tipico esempio di utilizzo è quello in cui si hanno più sensori di temperatura che potrebbero aver bisogno di differenti tarature, una per ciascun sensore.
In tal caso si può scrivere uno sketch che faccia ricevere i valori di taratura direttamente dal monitor seriale o, come descritto qui di seguito, dal plotter seriale, il tutto mentre viene visualizzato il tracciato delle rilevazioni eseguite.
L’invio di messaggi mediante protocollo seriale è molto utile in tantissimi casi ed avere questa funzione anche sul plotter seriale è certamente un vantaggio.
Proviamo a spiegare il concetto con un uno sketch dimostrativo, dove andiamo a variare il livello dell’asse di riferimento, quello verde nell’immagine che vedete a fondo pagina, in funzione di un valore inviato al Plotter Seriale.
In questo esempio il punto di riferimento “0” è costante in quanto inserito nel codice con un “Serial.println(0);” che varia solo se lo modifichiamo e poi ricompiliamo lo sketch. Riscrivendo lo sketch in questo modo:

String inputString = “”;
float inputValue = 0.0;
bool stringComplete = false;
 
void setup() { Serial.begin(115200); }
  
int ang=0;
float rad2grad=57.295779513;
  
void loop() {
  Serial.print(sin(ang/rad2grad));
  Serial.print(“\t”);
  Serial.print(cos(ang/rad2grad));
  Serial.print(“\t”);
  Serial.println(inputValue);
  ang++;
  delay(10);
  if (stringComplete) {
    inputString = “”;
    stringComplete = false;
  }
   while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == ‘\n’) {
      stringComplete = true;
      inputValue = inputString.toFloat();
    }
  }
}

È possibile inviare dei valori, mediante “send text box” del plotter seriale che permettano la variazione del valore di riferimento. Trattandosi di uno sketch che simula dei valori disegnando delle sinusoidi, il punto di riferimento potrebbe essere utile per verificare i valori attesi.
In particolare, nelle prime 3 linee di codice dello sketch vengono impostate tre variabili:

  • una stringa inputString che accoglierà i dati provenienti dal plotter seriale;
  • una variabile di tipo float che serve a memorizzare i valori convertiti in numero della inputString;
  • una variabile booleana che indica quando lo straming di dati sulla seriale è completo;

Nella linea 15 della funzione loop() il valore scritto via seriale non è più uno “0” costante ma il risultato della conversione in float del valore ricevuto dal plotter seriale (Serial.println(inputValue);).
Se il valore di stringComplete sarà true, verrà azzerato il valore della stringa in Input e sarà posto a false il valore stesso di quest’ultima.
Nella parte finale dello sketch (quella che inizia da while (Serial.available()) si legge lo streaming seriale fino a quando il buffer dei valori provenienti dal canale Serial non è vuoto; tale condizione si verifica quando Serial.available restituisce false; la linea 25 converte ogni carattere letto (Serial.read) sullo streaming seriale nella variabile inChar; la successiva linea memorizza, accodandolo alla precedente lettera ricevuta il valore letto nella variabile inputString; man mano che lo straming viene ricevuto e il buffer svuotato si arriva al carattere di fine riga “\n” che, come dice la definizione stessa, serve a comunicare che la stringa è terminata.
All’interno del controllo sull’ultimo valore impostiamo il valore di stringComplete a true e convertiamo il valore da String a Float usando il metodo toFloat() degli oggetti di tipo Stringa.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Main Menu