Ausgabe hexadezimaler Werte vereinfachen

Hallo,

ich muss folgendes ausgeben:

if(val_projtast == LOW && projektor_status == 2)                                                                     
  {
    Serial3.write(0x02);
    Serial3.write(0x41);
    Serial3.write(0x44);
    Serial3.write(0x30);
    Serial3.write(0x31);
    Serial3.write(0x3B);
    Serial3.write(0x50);
    Serial3.write(0x4F);
    Serial3.write(0x46);
    Serial3.write(0x03);
  }

Kann man das trotz Beibehaltung der hexadezimalen Schreibweise irgendwie einfacher schreiben und falls ja, wie?

Gruß Chris

Was wollst du da einfacherr halten?

uint8_t output[10] = {0x02, /* ... *// 0x03};
for(uint8_t i = 0; i < 10; i++) Serial3.write(output[i]);

Will hald ned zigfach Serial3.write schreiben müssen.

Gruß Chris

Wenn du nicht mit einem Array arbeiten kannst, dann schau dir mal die Streaming Libary an

Serial << 0x02 << /* … */ << 0x03 << endl;

Chris72622: Will hald ned zigfach Serial3.write schreiben müssen.

Dann schreibst Du halt einmal Serial3.print statt zigfach Serial3.write.

 Serial3.print("\x02\x41\x44\x30\x31\x3B\x50\x4F\x46\x03");  // mit extra RAM-Verbrauch
 oder
 Serial3.print(F("\x02\x41\x44\x30\x31\x3B\x50\x4F\x46\x03"));  // mit Flash-Makro

ich würde den Wert (oder die Werte) mit sprintf als hex formatieren, dann als string ausgeben:

char buf[20];
int value;
sprintf(buf, "%x\n",  value);
serial.print(buf);  // oder .write, wenn das auch geht

sprintf verwendet dieselben formatstrings wie printf:
http://www.cplusplus.com/reference/cstdio/printf/
http://www.cplusplus.com/reference/cstdio/sprintf/

edit: die Werte kann man jetzt aus einem initialisierten Array lesen und dann die Array-Zellen per for-Schleife zellenweise nacheinander hex-formatiert ausgeben.

byte array[]={0x02; 0x41; 0x44;.....};
for ( int i=0; i<sizeof(array); ++i ) {sprintf(buf, "%x\n",  array[i]); serial.print(buf); }

jurs: Serial3.print(F("\x02\x41\x44\x30\x31\x3B\x50\x4F\x46\x03"));

Das hat mir am Besten gefallen. :)

Danke allen!

Gruß Chris

Chris72622:

jurs: Serial3.print(F("\x02\x41\x44\x30\x31\x3B\x50\x4F\x46\x03"));

Das hat mir am Besten gefallen. :)

Du müßtest nur darauf achten, dass bei dieser Variante kein Nullbyte 0x00 vorkommt, denn das Nullbyte steht bei C-Strings für "String-Ende". Die Print-Funktion würde also den String nur bis vor dem Nullzeichen ausgeben, falls Du ein Nullbyte auf diese Art in den String hinein zauberst.

Also aufpassen, dass mit dieser Variante nur Bytes von 0x01 bis 0xFF ausgegeben werden können!