Serielles Senden eines Hex-Strings mit "Null Problemen"

Hallo,

ich würde gerne über die serielle Schnittstelle eines Arduino Megas folgenden Hex-String schicken:

02 8C 00 00 00 00 8C 03

Sende ich den String so..

Serial3.write(2);
Serial3.write(140);
Serial3.write(0);
Serial3.write(0);
Serial3.write(0);
Serial3.write(0);
Serial3.write(140);
Serial3.write(3);

..kommen alle Bytes wie gewünscht an.

Sende ich den String jedoch so..

Serial3.print("\x02\x8C\x00\x00\x00\x00\x8C\x03");

..werden nur die ersten beiden Zeichen gesendet.

Es scheint ein Problem mit der Null zu geben. Ich weiss allerdings nicht welches.

Bitte um Aufklärung. :fearful:

Gruß Chris

Ist doch logisch. In C sind Strings Null-terminiert. Mit "\x00" terminierst du den String. Dann ist egal was dahinter steht.

Chris72622: Es scheint ein Problem mit der Null zu geben. Ich weiss allerdings nicht welches.

Ein jeder C-String ist "nullterminiert" und daher definitionsgemäß beim ersten Nullzeichen zu Ende.

Was wäre dann bzgl. der Schreibweise die eleganteste Lösung diesen String zu senden?

Gruß Chris

Hast du doch bereits geschrieben, nutze Serial.write für jeden Hex Wert

Hm- is hald so viel Text und außerdem sehe ich die einzelnen Bytes nicht als Hexadezimalzahl. :drooling_face:

Gruß Chris

Chris72622: Hm- is hald so viel Text und außerdem sehe ich die einzelnen Bytes nicht als Hexadezimalzahl. :drooling_face:

Mit write kannst Du Aufrufe in dieser Form nutzen:

Serial.write(buf, len)

Also entweder deklarierst Du Deinen String in einem Char-Array und weist es an ein Byte-Array zu und sendest alle Bytes ohne das abschließende Nullzeichen im String:

 byte str1[]="\x02\x8C\x00\x00\x00\x00\x8C\x03";
  Serial.write(str1,sizeof(str1)-1);

Oder Du deklarierst ein Byte-Array und sendest das Byte-Array:

 byte str2[]= {0x02, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x03};
  Serial.write(str2,sizeof(str2));

Topp!

1000 Dank! :wink:

Gruß Chris