WIe liest man Bytestreams an Serial ein

Ja, die einzelnen eingelesenen Zeichen befinden sich der Reihe nach im Array serial_buffer.
Du kannst "ganz normal" darauf zugreifen. Also serial_buffer[0] ist 49, serial_buffer[1] ist 0, serial_buffer[5] ist 1 und so weiter.
Du kannst die einzelnen Stellen lesen und auch schreiben.

Es gibt allerdings ein paar Besonderheiten:

  1. Normalerweise ist das Endzeichen eines char-Arrays ein Byte mit Wert 0.
    Du kannst dann mit der Anweisung Serial.print(serial_buffer) das komplette Array bis zum Endzeichen (also der ersten NULL) ausgeben. Das gleiche gilt für Serial.write(serial_buffer).

Da bei deiner Anwendung allerdings der Bytewert 0 auch in der Nachricht vorkommt (und eben kein Endzeich ist), funktioniert die Ausgabe mit Print und Write nicht wie gewünscht/gewohnt.
Das ist aber kein großes Problem, du musst die Ausgabe, dann nur anders ("per Hand") machen und erst dann mit der Ausgabe aufhören, wenn dein Endzeichen kommt - nämlich 50.
Bei pars_serial ist das ja schon so gemacht worden - also in einer Schleife und dann zeichenweise, mit

Serial.print(serial_buffer[i])

und so weiter.

  1. Deine Nachrichten sind möglicherweise unterschiedlich lang. Du musst bedenken, dass längere Nachrichten nicht von nachfolgenden kurzen komplett überschrieben werden, sondern noch ein paar "alte" Zeichen im Array stehen bleiben. Auch hier ist es wichtig, dass du immer "händisch" auf dein Endzeichen überprüfst (siehe oben).

Gazello:
Als letzen Schritt soll auf
die " Anfrage " 49 1 0 0 0 1 0 51 16 30 50
die "Antwort" 49 1 0 0 0 1 0 51 16 5 13 237 50
gesendet werden .

Macht man das mit

if ( serial_ buffer[0] == 49  &&   serial_ buffer[1] == 1.................&&

serial_ buffer[10] ==50  ) {

for(int  i= 0; i ==8; i++)
serial.write ( serial_ buffer) i ;

serial.write ( 5);
serial.write ( 13);
serial.write ( 237);
serial.write ( 50);




oder geht das irgenwie eleganter , bzw kann man mehrere && , && , hintereinaderschalten?

Es gäbe Anweisungen, mit denen ganze Zeichenketten (oder Teile davon) miteinandner verglichen werden können (z.B. strcmp(), String compare). Allerdings arbeiten diese meist mit dem Endzeichen Null - selbes Problem wie oben: funktioniert also bei dir nicht wie gewünscht (weil NULL im Datenstrom vorkommt und kein Endzeichen ist). Ich glaube, dass musst du also auch "per Hand" machen.

Und ja, du kannst mehrere if-Abfragen mit && verknüpfen.
Eleganter - weiß nicht - bin nicht so der Experte für elegant :slight_smile:
Achtung es muss heißen

Serial.write(serial_buffer[i]);