[Risolto] Connessione seriale non va sotto gli 800ms

mikelefree:
Ho cantato vittoria troppo presto. Ora mi sorge un dubbio, elaborando un software a regola d'arte con l'aggiunta del terminatore ed evitando la classe String non si presenterebbe ugualmente il problema avendo il timeout di default a 1000ms e quindi una risposta "lenta"?
Essendo nuovo del forum vi chiedo un consiglio OT, lascio il [Risolto] o lo tolgo visto che a quanto pare la discussione non è giunta alla fine?

Come hai potuto notare usando il monitor seriale se metti un terminatore non hai rallentamenti questo perché la funzione che usavi si mette a leggere dati dulla seriale finché non incontra il terminatore (che per lei è CR+LF), non appena incontra tali caratteri ritorna il controllo al tuo programma che riprende il flusso.
Se tu invece scegli un altro terminatore dovai per forza implementare una lettura "carattere x carattere" dalla seriale finché non incontri il tuo terminatore, ad esempio il carattere virgola, pipe o ciò che più ti aggrada, quindi se con la Serial.available() riscontri la presenza di dati entri nell'if li con un while leggi i caratteri e li metti in un array di char (carattere per carattere) finché non incontri il tuo terminatore oppure se i caratteri sono finiti, a quel punto esci e fai ciò che devi, ovvero se hai incontrato il terminatore processi il dato, altrimenti scarti tutto in quanto la trasmissione non è completa.
Ma vista la tua casistica specifica eviterei tutta questa complessità in quanto tu trasmetti valori che rientrano nel singolo byte per volta, quindi con una semplice Serial.read() leggi il carattere che ti è arrivato lo casti come byte in modo da poterlo trattare direttamente (il byte accetta valori da 0 a 255, tu hai da 0 a 40 quindi perfettamente lecito), non aspetti null'altro ma processi il carattere ricevuto, al prossimo giro di loop se hai ancora caratteri nella seriale ripeti la cosa, sta a te lato Java inviare un singolo byte che contenga il tuo valore, ovvero non devi inviare caratteri ma valori (Cerca Arduino Serial.write e Serial.print per maggiori chiarimenti) a quel punto non hai protocollo da gestire, hai la massima velocità possibile e non usando classi complesse avrai possibilità vicine allo zero che il tuo programma si blocchi per problemi legati all'occupazione di memoria.

Concondo anche sul rimuovere (temporanemante perché alla fine ci arrivi alla soluzione, quasi garantito :wink: ) il risolto