質問: Serial1.read(); Serial.print(x); Serial.print(","); Serial.print(y); Serial.print(","); Serial.println(z); } ```
回答: 手元に使えるArduinoが無いので予測を書きます。 例示されている場合だと2連続で値が抜け落ちれば100 100 111 121のような並びは発生し得ます。 ではなぜ値が抜け落ちるのかという話になりますが、受信側がread()する速度よりも早くwrite()が行われると、いずれシリアルの受信バッファーが溢れることになります。その場合抜け落ちが生じるわけです(もちろん酷い通信ノイズや端子の接触ということもあります) 例示されているプログラムの場合、受信側はSerial.print()を実行していますのでその分送信側よりもloop()実行時間は長くなります。したがってread()でバッファーから値が取り出されるよりも早くデータが送られてくることになり抜け落ちが生じると思います。 (シリアル通信のread()はバッファーの中身を読んでいます。データが送られてくるタイミングは相手次第のため、こちらがread()できるようになるまでバッファーに溜めておくわけです。そしてArduino due(おそらくpro microも)の受信バッファーは64byte程度しかありません)