Usare Seriale come Display Aggiornabile

Ciao a tutti!
Ho una domanda riguardo l'utilizzo della seriale:
Tramite arduino vado a leggere numerosi sensori di una macchina relativi a pressione, temperatura, giri motore ecc. Per leggerli poi sfrutto la seriale, il fatto è che ogni volta che un dato cambia, la seriale mi scrive tutto il messaggio da zero, cioè per esempio se la temperatura acqua sale io vedo una cosa del genere sulla seriale

"
Temp. H20: 80°
Temp. H20: 80°
Temp. H20: 80°
Temp. H20: 81°
Temp. H20: 81°
Temp. H20: 82°
Temp. H20: 82°
"
E così via, e quando i dati non sono relativi ad un unico sensore ma a tanti sensori e si aggiornano velocemente, è impossibile leggerli con chiarezza e in maniera rapida e intuitiva.
Ciò che vorrei fare è quello di "aggiornare" la scritta sulla seriale, in modo ad esempio che la scritta "Temp H20" stesse ferma in una certa posizione dello schermo, e la temperatura scritta accanto venisse man mano riscritta, ma sempre nella stessa posizione.
So benissimo che con la semplice seriale di arduino ciò non è possibile, ma mi chiedevo se esisteva qualche libreria che permettesse la creazione di una qualche finestra in cui fosse possibile scegliere cosa scrivere e dove!

Grazie a chiunque possa aiutarmi!

Non è più semplice usare un display lcd? Costa 5 euro... e di librerie ne trovi finché vuoi...

Se proprio vuoi perseguire la via del terminale, vedi questo topic: CANCELLARE Monitor Seriale - Software - Arduino Forum.

Tra i comandi ANSI ci sono anche quelli per posizionare il cursore.

Forse non mi sono spiegato. Vorrei replicare la seriale senza lo scrolling, perchè devo visualizzare tutti i dati che viaggiano nel can-bus di una macchina e che si aggiornano a centinaia di Hz, rendendo lo scrolling rapidissimo.
La soluzione di acquistare un display non è nè ottimale nè comoda, mi vincola ad avere sempre un display a portata di mano quando devo farlo e mi obbliga a fare collegamenti in più, quando come richiesto mi servirebbe una cosa rapida e intuitiva.
Non è possibile, detto in parole povere, "simulare un display su computer"? Cioè vorrei una sorta di seriale in cui si può posizionare il cursore e decidere dove scrivere. Non esiste nessuna libreria che permette di farlo?

Ma ti sei almeno curato di leggere bene quel che ti ho passato? :confused:

Esitono gli Array ed i puntatori.....ed esite millis()

Puso:
Esitono gli Array ed i puntatori.....ed esite millis()

Puso, NON c'entra nulla ... non confondere le idee al OP che ... è già abbastanza confuso di suo ... ::slight_smile:

Guglielmo

brizio95:
Forse non mi sono spiegato.

Ti sei spiegato benissimo … ma, evidentemente, NON hai letto con attenzione il post che ti ha linkato SukkoPera !

Guglielmo

Scusate avevo capito che leggeva sul serial monitor dei dati che non sapeva ne fermare al momento giusto,ne sfruttare....sorry rileggo meglio.

SukkoPera:
Ma ti sei almeno curato di leggere bene quel che ti ho passato? :confused:

Yes, ho visto che parlano di Putty come possibile soluzione ma guardando online mi sembra una sorta di replica del seriale, e non posso decidere io dove scrivere.
Cioè io vorrei fare un schermata fissa, tipo

"
H20 Temp:
RPM:
Oil Temp:
Air Temp:
Oil Press:
Water Press:
..
..
"

E, alla frequenza che mi arrivano (quindi senza millis che faccia ritardi o che conteggi quando scrivere) aggiornare il dato accanto alla scritta. Sai se con putty è possibile? Se sì, sai dove posso informarmi a riguardo? Che non trovo molto.
So che la soluzione del display teoricamente funziona, ma non è ciò che mi serve, anche se come idea è perfetta, vorrei poter replicare tale display sul computer. Mi par strano non si possa fare in maniera easy, mentre con un display fisico si.

Ecco ho riletto

ci sono una serie di sensori che mandano valori di continuo.

Io lo metterei in un o più array poi dopo che il cronometro si è fermato, li stamperei sul serial monitor.

poi dopo che riesco a leggeri …Ect…Ect…

brizio95:
Yes, ho visto che parlano di Putty come possibile soluzione ma guardando online mi sembra una sorta di replica del seriale, e non posso decidere io dove scrivere.

A parte il monitor seriale di Arduino, che è molto semplice, i veri emulatori di terminale riconoscono caratteri di controllo con i quali puoi gestire, tra le tante cose, anche il cursore e la pulizia dello schermo … che sono poi le uniche cose che servono a te.

Come usare “putty” è ben desctitto nel suo MANULE che, ovviamnete … tocca studiare per configurarlo come emulatore di terminale VT100, dopo di che, le sequenze da inviare (che sono uno standard ANSI) le trovi QUI.

Guglielmo

Puso:
Ecco ho riletto ...

... hai riletto e NON hai capito. :smiling_imp:

Segui la discussione, dai retta ... che NON è un problema di codice, è un problema di quale strumento usare.

Guglielmo

gpb01:
i veri emulatori di terminale riconoscono caratteri di controllo con i quali puoi gestire, tra le tante cose, anche il cursore e la pulizia dello schermo …

Ottimo! Mi basta sapere che con emulatore come PUTTY si possa fare e mi metto a studiarlo. La domanda era nella speranza che esistessero librerie che permettessero di simulare un display sullo schermo o cose simili, ma a sto punto direi che uso putty.
Che conosco bene la libreria UTFT per i display, e speravo di trovare qualcosa di analogo anche senza display, essendo quella molto intuitiva e facile da usare, ma direi che mi tocca optare per Putty.
Grazie mille :slight_smile:

brizio95:
Ottimo! Mi basta sapere che con emulatore come PUTTY si possa fare e mi metto a studiarlo.

Ho aggiornato il mio post con un altro link utile :wink:

Guglielmo

:zipper_mouth_face: :zipper_mouth_face: :slightly_smiling_face: :slightly_smiling_face: :slightly_smiling_face:

È da tre post che te lo sto dicendo, e se ti degnassi di guardare quel Link troveresti anche del codice pronto che invia le sequenze per cambiare colore dei caratteri. Le sostituisci con le sequenze per settare la posizione del cursore, come descritto nei Link nella discussione stessa, e sei a posto. Sembra quasi che tu non voglia capire.

SukkoPera:
È da tre post che te lo sto dicendo, e se ti degnassi di guardare quel Link troveresti anche del codice pronto che invia le sequenze per cambiare colore dei caratteri. Le sostituisci con le sequenze per settare la posizione del cursore, come descritto nei Link nella discussione stessa, e sei a posto. Sembra quasi che tu non voglia capire.

Hai pienamente ragione, il codice scritto in quell'articolo (scritto da te tra l'altro) ero convinto servisse per cancellare tutte le scritte, invece solo provandolo ho capito quello che fa e come funziona, quindi grazie e perdonate l'insistenza, errore mio.
Se possa servire a qualcuno, scrivo la bozza del codice necessario a fare quanto scritto inizialmente (poi lo cambierò tantissimo perchè dovrò usarlo per leggere dati dalla linea can di una macchina, ma questo va oltre il seguente post), per ora lascia delle scritte fisse mentre ne cambia altre, evitando lo scrolling tipico della seriale di Arduino.

Grazie a tutti davvero, ho risolto!

int x = 0;
int y = 0;
int z = 0;
#define ESC "\x1B"

void cls() {
 Serial.print(ESC "[2J");
}

void setup() {
 Serial.begin(115200);
 cls();
}

void loop () {
x=x+1;
y = y+3;
z = z+5/3;
Serial.print(ESC"[5;1H");
Serial.print("ECT: ");
Serial.println(x);
Serial.print(ESC"[6;1H");
Serial.print("MAP: ");
Serial.println(y);
Serial.print(ESC"[7;1H");
Serial.print("TPS: ");
Serial.println(z);
delay(100);
}

Alla buon'ora... La cosa migliore, secondo me, sarebbe che facessi una funzione setCursor(x, y) da richiamare ogni volta, comunque vedi tu.

Si certo, devo leggere i dati via can-bus, l'idea è quello di leggere i dati per i primi due secondi e salvare i vari indirizzi, mettere in ordine crescente gli indirizzi in modo che ognuno sia su ogni riga senza mai cambiare, e ogni volta che arriva un dato modificare quella riga, quindi farò un metodo che riconosce l'indirizzo e lo salva, uno che setta il cursore e uno che scrive.
Grazie di tutto ragazzi :slight_smile: