[Risolto] Connessione seriale non va sotto gli 800ms

fabpolli:
Personalmente apprezzo molto chi, come te, è ricettivo ai suggerimenti e s'impegna a migliorare.
In tal senso, giusto per darti fastidio ancora un pochetto :slight_smile: , mi è venuta in mente un'altra possibile ottimizzazione, vado ad illustrartela poi tu deciderai se vale la pena, se è applicabile al tuo progetto ecc.
Hai un PC dove gira il programma java, risorse in abbondanza ecc., hai reso molto performante la comunicazione verso Arduino, ok perfetto. Ma se l'invio continuo di byte serve solo a gestire i relé e null'altro e visto che i casi sono pochi invece di fare flood sulla seriale così di continuo perché non sposti anche lato PC la logica? Spiego meglio quello che intendo, con una variabile d'appoggio vai a verificare se il precedente valore inviato appartiene ad un caso differente rispetto al valore attuale, se è così invii il byte e aggiorni la variabile appoggio, altrimenti non invii nulla. In questo modo il tutto è ancora più ottimizzato a scapito di dover riportare modifiche (se mai ve ne fossero) sia lato Arduino, sia lato java. Che ne pensi?

Non è una cattiva idea, e, a dire il vero, ci avevo pensato prima di trovare la soluzione ai tempi di riposta. Ora che la comunicazione è efficente come volevo, sto rendendo il software più completo e di conseguenza relativamente complesso e mi trovo decisamente meglio a lavorare su Arduino che si avvicina molto di più a linguaggi che conoscono.

docdoc:
Ottimo consiglio fabpolli, di fatto trasformi la comunicazione in "inerziale" :wink: aggiornando lo stato solo in caso di cambiamenti.

Però dato che per deformazione professionale cerco sempre di trovare eventuali "problemi", penso che sia il caso allora di accertarsi che lato Arduino sia stato recepito l'ultimo comando e quindi il relè sia stato attivato/disattivato. Per cui si dovrebbe implementare nel protocollo una risposta (il classico ACK) da parte di Arduino per confermare la ricezione del comando e l'attivazione del relé (ok, del solo pin corrispondente, ma tralasciamo eventuali problemi hardware del relè). E magari anche un comando di sync ossia ogni tanto chiedere ad Arduino lo stato dei pin dei relè.

Ma forse per lo scopo del nostro amico è tutto abbastanza superfluo, visto che non sta comandando (spero) una navicella spaziale o un reattore nucleare :slight_smile:

Dal punto di vista concettuale come non darvi ragione. Credo che, per l'appunto, non comandando dispositivi di vitale importanza possa già andare bene così anche perché, come detto sopra, con Arduino mi trovo molto più a mio agio nello sperimentare rispetto a Java.

Non me ne vogliate. :wink: