Userò un Arduino come ponte tra un client Java di alto livello del computer e alcune unità di calcolo hardware di basso livello (ad esempio altri Arduino). Devo trovare una soluzione per comunicare periodicamente in entrambi i modi. Dovrebbe essere possibile inviare ingressi analogici digitali al PC e ricevere uscite analogiche digitali dal PC tramite seriale.
Ho requisiti molto specifici per far funzionare il mio progetto:
-
Latenza più bassa possibile in entrambi i modi. Un'elevata latenza causerebbe instabilità dei sistemi controllati.
-
Periodo di aggiornamento estremamente costante, possibilmente definito dall'utente. La variazione della frequenza di campionamento causerebbe imprecisioni nel controllo.
Ho bisogno di una soluzione molto veloce possibile per la frequenza di aggiornamento di 100 Hz e superiore.
Finora ho ho provato a inviare dati tramite Firmata al mio client java utilizzando l'interruzione del tempo.
ISR (TIMER1_COMPA_vect) {Firmata.sendAnalog (analog, analogRead (analog));}
I messaggi tuttavia non arrivano a una velocità molto costante e talvolta vengono mantenuti per due o più volte il periodo di campionamento, il che è inaccettabile. Per le frequenze più alte questo accade ancora più spesso. Sospetto una specie di tampone. Hai idea di dove dovrei cercare i colli di bottiglia? Sarebbe utile progettare il mio protocollo di comunicazione e abbandonare Firmata?
EDIT: Guarda il diagramma allegato. Le linee blu sono "ingressi", le linee verdi "uscite". In questo momento sto cercando di progettare "Arduino (Bridge)"