Senden mehrerer Hex-Werte

Hallo,

ich würde gerne mehrere Hex-Werte senden.

Ist die Verwendung eines Arrays in Kombination mit einer for-Schleife die beste Möglichkeit um das hier kompakter zu schreiben:

  Serial.write(0x52);
  Serial.write(0x54);
  Serial.write(0x45);
  Serial.write(0x3F);
  Serial.write(0x0D);
  Serial.write(0x0A);
  Serial.write(0x0D);
  Serial.write(0x0A);
  Serial.write(0x3D);
  Serial.write(0x31);
  Serial.write(0x0D);
  Serial.write(0x0A);
  Serial.write(0x0D);
  Serial.write(0x0A);
  Serial.write(0x23);

Gruß Chris

oder für schreibfaule:

S(0x52);S(0x54);S(0x45);S(0x3F);S(0x0D);S(0x0A);S(0x0D);S(0x0A);S(0x3D);
S(0x31);S(0x0D);S(0x0A);S(0x0D);S(0x0A);S(0x23);

void S(w) {
  Serial.write(w);
}

gruß stefan

Für was steht das "w"?

Gruß Chris

oh, zu schreibfaul.
byte w

Ich würde das entweder so schreiben :

Serial.println("RTE?");
Serial.println();
Serial.println("=1");
Serial.println();
Serial.print("#");

Oder ein byte Array mit dem obigen Text incl. der 0x0D 0x0A Zeichen nehmen, und das direkt ausgeben

const char myArray[] = "RTE?\r\n\r\n=1\r\n\r\n#";
Serial.write((byte*)myArray,strlen(myArray)); // Write a byte array

Nachtrag:
Sollte dasselbe sein wie

const byte myArray[] = { 0x52, 0x54, 0x45, 0x3F, 0x0D, 0x0A, 0x0D, 0x0A, 0x3D, 0x31, 0x0D, 0x0A, 0x0D, 0x0A, 0x23  };
Serial.write(myArray,sizeof(myArray));

Hallo,

wenn der String wirklich den Hex-Zahlen entspricht (ich habe das nicht nachgeprüft), spricht sicher auch nichts gegen
Serial.println("RTE?\r\n\r\n=1\r\n\r\n#");

Gruß,
Ralf

Ah- ok.

Das Ergebnis müsste das selbe sein, meinst Du; Ralf?

Gruß Chris

Bis auf das letzte 0x0D 0x0A
:wink:

Ja, ich denke schon. Folgender Sketch

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print("RTE?\r\n\r\n=1\r\n\r\n#");
  
  delay(5000);
}

bringt in Hyperterm folgendes Ergebnis: (siehe Bild)

Das scheint also zu passen. Wenn Du, wie von mir oben angegeben, ein Serial.Println() benutzt, wird halt noch ein 0x0D, 0x0A angehängt.

Gruß,
Ralf

forum.jpg

 Serial.print("RTE?\r\n\r\n=1\r\n\r\n#");

C (++) wird wohl nie meine Muttersprache :blush:
Bitte um eine Erklärung ..

Das ist nicht C-spezifisch

\r = carriage return
\n = line feed

\ dient dabei als escape character. Deshalb muss man "\" schreiben wenn man wirklich einen Backslash will.

Erklärung der Character-Literale und der ESC-Sequenzen: elektronik-bastelkeller.de

Gruß,
Ralf

Na ja, C-spezifisch ist es schon, aber du sollst ja hier was lernen :wink:

Ralfs Link zeigt dir auch eine Alternative:
bis du dich an '\n' gewöhnt hast, kannst du auch '\x0A' nehmen, falls dir das lieber ist,
oder wenn es dir eher auf den hex-Code des Zeichens als auf seine Bedeutung (newline) ankommt.

Ok, es kommt von C, aber das funktioniert in Java, C# und anderen Sprachen mit C-ähnlicher Syntax genauso. Du hast dort lediglich Methoden wie newline(), die dir Plattform-abhängig eine neue Zeile erzeugen. Aber gerade wenn man etwas an eine andere Maschine schickt kann man sich darauf nicht unbedingt verlassen, dass die Sequenz gleich ist.

Ahh... jetzt klingelts, war wohl das bekannte Brett vor Kopf - Danke !