[Risolto] Connessione seriale non va sotto gli 800ms

Mah, scusate ma ho qualche perplessità su tutto ciò...

A 9600 baud sono circa 900 byte al secondo, d'accordo che non c'è handshake hardware ed il buffer lato Arduino è relativamente piccolo, ma non vedo proprio come mandare 2 caratteri possa essere limitato a 800 ms quindi circa 400ms a carattere, come se la seriale fosse a 25 baud!

Allora, a parte evitare le "String" lato Arduino come fosse kriptonite per Superman, non conosco Java (ma esiste una ".serialWrite()" o è una tua funzione?) ma quello che vedo è che ti MANCA UN TERMINATORE! Se tu mandi due valori, diciamo 6 e 8, come li distingui da "68"? Oppure se stai mandando 84 e nel buffer è arrivato solamente la prima cifra "8"?

Ad esempio diciamo mettendo il classico LF (ma il discorso va bene con qualsiasi carattere, anche "|") qualcosa del tipo:

String velocita=Integer.toString((int)v);
arduino.serialWrite(velocita + "\n");

e quindi in Arduino aspettare che ci sia il terminatore prima di acquisire il valore.
Se tu hai fatto prove con il Monitor Seriale attento che quello accumula i caratteri digitati e li manda tutti insieme (più il Line Feed...) per cui non è la stessa cosa.

Oppure puoi mandare sempre 2 caratteri (quindi non "8" ma "08") per cui basta attendere che Serial.available() sia uguale a 2, e leggere i caratteri e convertirli in intero.

Ma, meglio ancora, puoi farlo usando un byte visto che l'intervallo dei valori interi è compatibile con un char, e visto che si tratta di un dialogo tra macchine e non con un umano, è sempre meglio progettare i propri protocollini in modo che sia tutto più agevole per le macchine...

Quindi concordo con il suggerimento di fabpolli, che ti evita persino il discorso del terminatore in quanto il pacchetto è di lunghezza fissa (1 char ossia 1 unsigned byte)...

PS poi se la seriale la metti ad una velocità maggiore, diciamo anche "solo" 38400 hai tanta di quella banda che potresti usarla anche per ben altro... :wink: