der Fehler kann v.a. in der verkabelten Serial TX/RX-Kette vorkommen, also außerhalb von BT.
Meine Serial messages (hin/zurück) laufen immer per handshake, bei dem die Fernsteuerung und das Mobil msgs wechselweise in der Art versenden:
0 0xff Start
1 msg_len // (<=255)
2 timer-byte für heartbeat (in 100ms), auch für timeout
3 uint8_t(chksum) // summe über alle Datenbytes, die ab hier folgen, davon das low byte
4 ack
5 daten
6 daten
7 daten
8 daten
...
0xfe Ende
so kann gecheckt werden, ob
- alle bytes gelesen wurden (Anzahl inkl. Start und Ende)
- ob dabei auch alle Einzel-Bytes korrekt sind über chksum (nur geringe Fehlerwahrschl. bei weggelassenem chksum- highbyte)
- ob timeout und heartbeat im Rahmen sind
- ob die zuletzt empfangene Nachricht korrekt war
nach dem Senden wartet die Fernsteuerung, ob alle 4 checks korrekt waren beim Empfänger (Senden von ack plus Werte des Mobils an Fernsteuerung) - dann wartet wieder das Mobil, bis die Fernsteuerung neue Daten sendet.
PS
auch hier müsste evt. besser sichergestellt werden, dass immer alles gesendet wird, nicht nur bei Änderung eines Wertes.
Ändert sich nämlich ein Wert sehr schnell (255-->0), kann es sein, dass der Empfänger nur eine msg mit einem Zwischenwert liest (z.B. 50), aber die 0 verpasst: trotzdem wird er die chksum etc. als korrekt prüfen (auf 50) ohne wegen der Zeitverzögerung jemals die 0 in der Folge-Message zu bekommen, und der Sender kann u.U. der Meinung sein, er hätte die letzte Änderung schon gesendet und sendet die 0 nicht nochmal: also macht das Mobil mit Wert 50 weiter, nicht mit 0.