io un paio di soluzioni le ho postate, se poi volete usare chip esterni fate vobis.
Quindi mi par di capire che per evitare un buffer overflow (ma si chiama così anche quel che succede al buffer dell’Arduino in questa circostanza?)
il buffer overflow è quando un buffer supera le sue dimensioni massime. Un buffer è una locazione di memoria temporanea per alcuni elementi. Il termine vale per arduino, mille altri linguaggi, e pure quando la minestra esce dal piatto 
bisogna coordinare meglio la comunicazione con chi gli manda i dati sulla seriale, no?
no, con la seriale che usiamo noi (TTL) puoi scegliere solo la baud-rate, il massimo che puoi fare è impostare il baud-arte minimo e sperare che il loop sia più veloce del tempo di riempimento del buffer.
Insomma, bisogna fare in modo che il software che comunica via seriale con Arduino non gli spari più di 128 byte alla volta, o che almeno attenda che Arduino lo "avverta" di aver già letto una prima parte da 128byte e solo dopo gli mandi dell'altro.
Non sempre il chip con cui comunichi può essere riprogrammato, e quindi devi risolvere lato arduino.
TROVATA LA SOLUZIONE:
senza sbattere troppo la testa… ATTENZIONE: Bisona modificare una libreria di sistema di arduino IDE, quindi fai usa un’installazione a parte per evitare casini su altri progetti!
- vai nella crtella arduino-00XX/hardware/arduino/cores/arduino/
- apri il file HardwareSerial.cpp
e cerca:
// Define constants and variables for buffering incoming serial data. We're
// using a ring buffer (I think), in which rx_buffer_head is the index of the
// location to which to write the next incoming character and rx_buffer_tail
// is the index of the location from which to read.
#if (RAMEND < 1000)
#define RX_BUFFER_SIZE 32
#else
#define RX_BUFFER_SIZE 128
#endif
modifica RX_BUFFER_SIZE 128 con un numero più elevato. Attenzione a non superare i limiti della RAM! e soprattutto rendi più veloce il loop(), altrimenti puoi avere anche un buffer di gigabite, ma se il loop dure 3 settimane…