Ohne in diesem Thread irgendwas gelesen zu haben, tippe ich auf eine übertragenes Zeilenende-Zeichenfolge. Wenn es um Serial.println() geht, nimm Serial.print()
Das sind Steuerzeichen, die dem Fernschreiber sagen Wagenrücklauf (Carriage Return = 0x0D) und Zeilenvorschub (Line Feed = 0x0A). Heutzutage markieren sie das Ende einer Zeile, bei Windows mit CR+LF, bei Linux nur mit LF.
Wenn die Checksumme per XOR gebildet wird und 0x0A nicht im Datenstrom vorkommt, kannst Du, sofern das Byte kein 0x0D ist, jedes eingelesene Byte per XOR mit der Checksumme verrechnen.
Wenn das eingelesene Zeichen 0x0D ist, prüfst Du, ob die Checksumme==0 ist.
Wenn JA, sind die übertragenen Daten inklusive Checksumme richtig übertragen worden.
Das noch kommende 0x0A musst Du noch auslesen und verwerfen.
Wenn die nächste Übertragung startet, die Checksumme vorher Nullen (wenn eine fehlerhafte Übertragung vorlag, ist die Checksumme nach dem Byte vor dem 0x0D nicht auf Null gekommen).
Tommy56:
Das ist der Zeilenvorschub. Einen anderen gibt es nicht. Also entweder weg lassen oder mit auswerten.
Das stimmt nicht. Ich hatte mal das Problem eines Kunden zu debuggen, bei dem die unterschiedlichen Arten, Zeilenumbrüche zu kodieren, die Ursache waren. Seine Windows-Software hat die ohne zu fragen nach „Windows“ konvertiert, weshalb auf Linux-Server liegende Perl-Skripte auf einmal nicht mehr funktionierten. Beheben ließ sich das auf die Schnelle nur, indem ich ein dos2unix-Konvertierer benutzt habe.
Gruß
Gregor
PS: Fies daran war, das es richtig aussah. Den Unterschied habe ich erst in einem Hex-Editor gesehen.
gregorss:
PS: Fies daran war, das es richtig aussah. Den Unterschied habe ich erst in einem Hex-Editor gesehen.
Leerzeichen vor dem Zeilenende sind meine Lieblinge. Ich nutze Notepad++, weil man sich dort all diese Dinge anzeigen und konvertieren lassen kann, auch ANSII nach UTF-8.
Nur muß man halt wissen, wonach man suchen könnte ;D
agmue:
Nur muß man halt wissen, wonach man suchen könnte ;D
Ja, und das noch mit einem Typ, der monatelang immer wieder die gleiche Art von Problemen hatte und dermaßen sauer war, dass der immer zu mir durchgestellt wurde. Wenn meine Kollegen die Augen verdreht haben, mussten sie gar nicht mehr sagen, um wen es geht.
War im Rückblick aber eine nette Übung, jemanden mit Freundlichkeit und Kompetenz zu „zähmen“. Der hat irgendwann ein Fax geschickt, in dem er meinem Chef mitteilte, wie toll es ist, wenn sich Leute um Probleme kümmern („Seit Herr S. bei Ihnen arbeitet, gibt es keine Probleme mehr“).