visualizzare dati su monitor seriale arduino

Salve a tutti, eccomi dinuovo qua a chiedervi aiuto. Ho cominciato il mio preogetto con arduino e i potenziometri, avrei bisogno del vostro aiuto per visualizzare, sul monitor seriale arduino, i valori dei potenziometri in colonne che partono dalla sinistra verso destra. ho fatto varie prove ma non ho ottenuto il risultato desiderato. Mi potete aiutare. Grazie in anticipo a tutti.

In sintesi, il monitor seriale dell'Arduino non è uno schermo del computer dove puoi spostare il cursore come ti pare. Se vuoi incolonnare i dati devi spedire i vari spazi vuoi che ti incolonnino i numeri, tenendo conto della lunghezza dei dati da stampare. ad esempio:

   123|   234|  1234|
    12|     1|     8|

Quindi devi prima verificare quanto siano lunghi i numeri e poi premettere i necessari spazi

PS: Del trattamento dei dati da seriale se ne sta ad esempio parlando qui dove si suggerisce l'uso di un terminale più efficiente di quello integrato.

Grazie mille della risposta, ma in termini di codice come posso fare a impostare il tuo esempio?

Dipende anche dai dati che devi trattare.

Facciamo un’ipotesi. Mettiamo che tratti numeri e che li hai nel range 0-9999, ad esempio. Quindi sono max 4 caratteri.
A questo punto fai un ciclo e verifichi che valore ha il numero e stampi X spazi iniziali.
Esempio:
da 0 a 9: 3 spazi iniziali (perché il numero è composto da 1 sola cifra)
da 10 a 99: 2 spazi iniziali
da 100 a 999: 1 spazio iniziale
da 1000 a 9999: nessuno spazio.
Poi stampi il tuo numero, poi il carattere delimitatore e poi ricominci finché non hai terminato i valori.

grazie per la risposta. Ma questo tuo esempio e anche valido se io voglio acquisire i valori in tempo reale dei potenziometri?

Certo, basta mettere il valore letto in una var e poi controllare la var prima della stampa su monitor seriale

Ok grazie mille, sei stato veramente di aiuto.

Leo, e se usassi il comando “sprintf” della libreria AVR “std.io” ? io l’ho usata per fare qualcosa del genere, in pratica faccio:
(pseudo code, occhio)

#include <stdio.h>   //per usare sprintf...

int Val_Sensore_1;
int Val_Sensore_2;

//dichiaro un'array "char" carattere chiamato buffer da 80 bytes che conerrà i dati da trasmettere...
char buffer[80];      //serve a contenere i dati da trasmettere alla seriale in blocco, senza usare vari Serial.print(), viene usata
                                     //insieme alla funzione C -> sprintf  così:  sprintf("testo %d, testo %d",Dato1,Dato2);  dove i testi vanno messi tra
                                     //doppie virgolette, %d va obbligatorio per ogni dato che sarà chiamato successivamente, per Unsigned long usare %ld.

//************************************************
void setup() {

Serial.begin(9600);  
//qui metti tutto il necessario per far inizializzare il tuo codice...

 }

//************************************************
void loop() {
  
  Val_Sensore_1 = analogRead(A0);
  Val_Sensore_2 = analogRead(A1);

sprintf(buffer," Sensore 1=%d, Sensore 2=%d", Val_Sensore_1, Val_Sensore_2);  

Serial.println(buffer);  //stampiamo il contenuto del array "buffer"

}

facendo un’attento uso di questa tecnica, si potrebbe “stampare” anche informazioni “buffer” diverse a seconda del momento, basterà caricare con il comando “sprintf” i nuovi dati nel buffer.

Unico “problema” di questo approccio, è che occupa un bel pò di risorse flash e RAM e quindi va valutato se i dati da stampare sono tanti…

A me questa tecnica mi ha consentito di evitare di usare tantissimi “Serial.print” per scrivere su una singola linea…

Ho anche visto avvolte che vengono usati dei caratteri di tabulazione ad ogni Serial.print, ma non ho mai approfondito come funzionano…

hiperformance71: Leo, e se usassi il comando "sprintf" della libreria AVR "std.io" ?

Unico "problema" di questo approccio, è che occupa un bel pò di risorse flash e RAM e quindi va valutato se i dati da stampare sono tanti...

Ti sei risposto da solo ;) Dipende se ne vale la pena oppure no.

Scusate se mi intrometto, ma forse dimenticate l'uso del carattere TAB ("\t"). Certo non incolonna i numeri giustificandoli a destra, ma è semplice e veloce da usare.

  Serial.println("DATO1\tDATO2\tDATO3\tDATO4");
  Serial.print(DATO1);
  Serial.print("\t");
  Serial.print(DATO2);
  Serial.print("\t");
  Serial.print(DATO3);
  Serial.print("\t");
  Serial.print(DATO4);

grazie mille cyberhs, la tua e una soluzione molto semplice per un novizio come me.
Comunque grazie a tutti i vostri consigli sono sempre utilisssimi.
Complimenti a tutto il forum arduino.

cyberhs: Certo non incolonna i numeri giustificandoli a destra, ma è semplice e veloce da usare.

Alternativa valida.