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.
Gruß Chris
Ist doch logisch. In C sind Strings Null-terminiert. Mit "\x00" terminierst du den String. Dann ist egal was dahinter steht.
jurs
December 4, 2014, 10:05am
3
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.
Gruß Chris
jurs
December 4, 2014, 10:48am
7
Chris72622:
Hm- is hald so viel Text und außerdem sehe ich die einzelnen Bytes nicht als Hexadezimalzahl.
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));