plot grafico tramite processing real time

se prendiamo 10 bit per lettura (risoluzione max ADC), abbiamo 30 bit.
se prendiamo 4 byte ("risoluzione" min seriale), abbiamo 32bit. Quindi possiamo mettere 3 letture ADC in 4 byte! ma sprechiamo 2 bit a volta.

Se volessimo usare anche questi 2 bit, basta vedere ogni quante scritture abbiamo accumulato abbastanza "2bit" da fare 10 bit:
10/2=5scitture di 3 valori (avvero 4 byte)

quindi ogni 53=15 letture, ovvero 54=20byte scritti, abbiamo accumultao abbastanza 2bit per farci stare una lettura ADC.

Quindi il messaggio finale usa 20 byte e conterrà 16 letture invece che 15!

di seguito vedi come le letture di A, B e C (3 letture ADC a 10 bit) vengono posizionate nei primi 3 byte. nota come se ne fregano altamente della suddivisione in byte del messaggio; dunque ogni invio è assolutamente legato al precedente e necessita di un poco di gioco di bit-shift.
io ho preferito perdere 2 bit e creare il messaggio corto, ovvero di 3 letture.

In realtà per non perdere nessun bit il messaggio deve essere lungo multipli di 5byte (il 20 calcolato prima non è ottimizzato :slight_smile: ), infatti 5byte*8bit = 40bit, perfetti per contenere 40bit/10bit/lettureADC=4lettureADC
( bit/lettureADC è il "dimensionamento" della variabile, ovvero numero di bit fratto lettura ADC, tardotto in lingua corrente vuol dire bit necessari per lettura ADC)

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 _ 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 _ 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24
a a a a a a a a a a b b b b b b b b b b c c c c

NOTA: se usi solo gli 8bit più signifacativi a lettura, abbiamo che i bit ADC sono == ai bit utili via seriale, dunque questo casino assurdo non è necessario da fare

Per la sincronizzazione, abbiamo 3 byte (da 1 a 8, da 9 a 16, da 17 a 24), e per decodificare l'informazione bisgna avere per forza i dati a parteire dal primo byte fino a fine messaggio (che può essere lungo 4,5,20 byte a secondaa del valore che hai scelto per comprimere il più possibile).
Immagina che arduino inizia a leggere e sparare i dati via seriale al pc. finchè il programma lato PC non è attivato, i byte vengono persi nel nulla galattico (/dev/null, se sei linuxiano). Quindi la tua applicazione parte e gli arriva un byte. questo byte è forse l'inizio della sequenza? o quello di mezzo? o quello finale?
se invece usi L'ADC a 8 bit, sai che ogni byte che ti arriva è una lettura e non devi decodificarla, però nel caso tu faccia letture su più pin, o con significato differente, questa lettura cosa rappresenta? la lettura sul pin A0, quella sul pin A2, etc..?