Use também o SerialPort.BytesToRead, porque pode ser que venha uma rajada de bytes da serial, em vez de um byte por vez
Coloque todo mundo que chegar da serial em um buffer
Quando enviar algo para o Arduino, sinalize para um System.Threading.AutoResetEvent que também esteja dentro do evento SerialPort.DataReceived, como uma forma de sincronizar as operações de envio e espera de dados
[]s
nu