Ciao a tutti! Sto usando un modulo bluetooth (questo) per far comunicare il mio MacBook con il mio Arduino UNO, tramite bluetooth.
Tutto sembra funzionare alla perfezione..
Senonchè, inviando dei dati dal Mac utilizzando Processing, la comunicazione è estremamente lenta (cosa che non avviene nell'altro verso).
La cosa diventa ancora più strana perchè se invio una serie di 'array di byte' la velocità nell'inviare i vari byte è alta mentre la velocità tra due invii è estremamente lenta.
Vi faccio subito un esempio per farvi capire meglio. Codice Arduino:
Mi spiegate com'è possibile? Per come la vedo io, i vari byte vengono inviati uno dietro l'altro, perchè quindi c'è questa differenza?
Di conseguenza, inviando byte separati, posso inviarne solamente 4 al secondo.. ma inviando blocchi da 10 bytes posso inviarne sempre 4 in un secondo!
ogni byte letto da bluethoot scrivi un sacco di byte(uno per ogni cifra del valore di millis() + '\n') su seriale. Il buffer seriale si riempie, ed essendo circolare si sovrascrive su se stesso...
probabilmente è questo che vedi.
soluzione: aumenta la velocità della Serial al massimo. poi fai (velocità serial /10)/(velocità bluetoot/10) ed ottieni di quanti byte/s è più veloce la serial del pc... quindi quante cifre di millis() puoi scrivere ad ogni bluetooth.read();
dato che milllis() al massimo può contenere 10cifre (4294967295) probabilmente dovrai fare più di una bluetooth.read(); ogni serial.print() in modo da rendere la serial abbastanza veloce.
ogni byte letto da bluethoot scrivi un sacco di byte(uno per ogni cifra del valore di millis() + '\n') su seriale. Il buffer seriale si riempie, ed essendo circolare si sovrascrive su se stesso...
probabilmente è questo che vedi.
soluzione: aumenta la velocità della Serial al massimo. poi fai (velocità serial /10)/(velocità bluetoot/10) ed ottieni di quanti byte/s è più veloce la serial del pc... quindi quante cifre di millis() puoi scrivere ad ogni bluetooth.read();
dato che milllis() al massimo può contenere 10cifre (4294967295) probabilmente dovrai fare più di una bluetooth.read(); ogni serial.print() in modo da rendere la serial abbastanza veloce.
No, non hai capito.. quello che vedo è proprio quello che dovrei vedere, non vedo perché il buffer seriale dovrebbe riempirsi.
La velocità della seriale non può fare da collo di bottiglia fino a 4 byte/s. Non può dipendere da quello.
Il problema è che non riesco a ricevere più di 4 bytes al secondo. Però riesco a ricevere 4 blocchi da 10 bytes sempre in un secondo.
Questo non torna!
Continuo a non capire... Puoi mettere il codice lento e wuello veloce?
in oltre nel seriake Arduino mi aspetto di leggere i valori di millis() che non possono essere quelli