Auslesen von Byte Packages über UART und abspeichern in einen Array

Hallo zusammen,

ich bin ein wenig verzweifelt und stark irritiert, da es zu meinem Problem wohl unendlich viele Lösungsmöglichkeiten gibt…

Und zwar folgendes:

Ich habe über TX/RX einen Sensor mit dem Arduino Mega verbunden und diesen entsprechend mit dem PC.

Dabei sendet der Sensor ständig 22 Bytes, wobei hier gilt :

< Startbyte > < Indexbyte > < Speed L> < Speed H> < Data 1> <Data 2> < Res 2> < Data3>

Mit Hilfe des nachfolgenden Codes:

void setup() {

  Serial.begin(230400);
  Serial3.begin(115200);
}

void loop() {

  if (Serial3.available()) {

    int inByte = Serial3.read();

    if(inByte==250){

      Serial.println(inByte,HEX);
      Serial.print(";");
     
    }
    
    else if(inByte!=250){
    
      Serial.print(inByte,HEX);
      Serial.print(";");
    }
   
  }
  

}

erhalte ich folgendes Ergebnis (In Open Office aufgewertet):

FA;A1;FF;3F;7A;5;39;0;6B;5;31;0;78;5;32;0;9B;5;25;0;A2;29;
FA;A2;FF;3F;65;5;3A;0;54;5;36;0;44;5;3D;0;36;5;41;0;B4;1A;
FA;A3;FF;3F;28;5;42;0;1E;5;4B;0;13;5;47;0;8;5;46;0;10;77;
FA;A4;FF;3F;FF;4;4A;0;F7;4;4C;0;EF;4;48;0;E6;4;48;0;66;5E;
FA;A5;FF;3F;E0;4;53;0;D8;4;18;0;D2;4;4F;0;B0;4;C;0;96;48;
FA;A6;FF;3F;C1;4;10;0;BF;4;1B;0;BD;4;53;0;B8;4;5F;0;35;25;
FA;A7;FC;3F;B3;4;5D;0;B1;4;5D;0;B3;4;61;0;B2;4;5E;0;B4;30;
FA;A8;FC;3F;B1;4;6A;0;AE;4;65;0;C7;4;E;0;5A;7;3F;0;9D;37;
FA;A9;FC;3F;56;6;45;0;55;7;47;0;57;7;45;0;52;7;3D;0;2D;69;
FA;AA;FC;3F;1D;7;1C;0;9E;6;2F;0;56;6;15;0;35;80;0;0;D5;12;
FA;AB;FC;3F;54;3;D2;0;51;3;EA;0;4D;3;F0;0;35;80;0;0;8;69;
FA;AC;FC;3F;71;4;7C;0;6E;4;55;0;35;80;0;0;72;3;33;0;90;66;
FA;AD;D3;3F;55;3;73;0;42;3;92;0;31;3;95;0;20;3;A6;0;9E;25;
FA;AE;D3;3F;14;3;B0;0;8;3;C2;0;FE;2;D0;0;F4;2;D2;0;4A;F;
FA;AF;D3;3F;EB;2;D0;0;E1;2;E5;0;D8;2;EF;0;D1;2;EF;0;40;7F;
FA;B0;D3;3F;CA;2;F0;0;C4;2;F8;0;BD;2;5;1;B9;2;FF;0;B4;73;
FA;B1;D3;3F;B3;2;8;1;AE;2;FB;0;A9;2;E;1;A4;2;58;1;5B;6B;
FA;B2;D3;3F;9F;2;57;1;97;2;FF;0;91;2;29;1;90;2;4D;1;F8;71;
FA;B3;B8;3F;8B;2;6A;1;76;2;40;1;73;2;62;1;74;2;4C;1;67;51;
FA;B4;B8;3F;73;2;8F;1;70;2;28;1;70;2;59;1;77;2;76;1;5F;4C;
FA;B5;B8;3F;76;2;3D;1;7D;2;11;1;8C;2;47;1;EE;6;3D;0;E0;41;
FA;B6;B8;3F;D3;6;3C;0;B7;6;43;0;21;4;3C;0;12;4;6F;0;7F;2D;
FA;B7;B8;3F;3;4;6C;0;2;4;62;0;54;6;48;0;41;6;47;0;CE;12;
FA;B8;B8;3F;2C;6;47;0;15;6;16;0;BA;3;AF;0;AF;3;D0;0;E5;43;
FA;B9;9B;3F;A7;3;C8;0;9F;3;DA;0;2;80;0;0;90;3;F7;0;9B;21;
FA;BA;9B;3F;68;3;78;0;80;3;F2;0;7A;3;F1;0;74;3;FB;0;7;B;
FA;BB;9B;3F;6D;3;FF;0;67;3;C;1;62;3;21;1;5D;3;25;1;C7;2D;
FA;BC;9B;3F;58;3;30;1;54;3;2F;1;50;3;23;1;4C;3;26;1;B2;2E;
FA;BD;9B;3F;48;3;17;1;46;3;1A;1;43;3;1B;1;42;3;17;1;BB;1C;
FA;BE;9B;3F;40;3;C;1;40;3;ED;0;4F;3;C4;0;56;3;23;1;A7;11;
FA;BF;A2;3F;56;3;C;1;58;3;34;1;58;3;4F;1;58;3;47;1;B7;2D;
FA;C0;A2;3F;59;3;5A;1;58;3;67;1;58;3;66;1;5A;3;59;1;5D;46;
FA;C1;A2;3F;5A;3;5A;1;5C;3;59;1;5C;3;51;1;60;3;3D;1;3D;46;
FA;C2;A2;3F;60;3;35;1;63;3;30;1;64;3;44;1;69;3;34;1;66;3E;
FA;C3;A2;3F;6C;3;34;1;6E;3;2B;1;72;3;34;1;76;3;E;1;5E;45;
FA;C4;A2;3F;7A;3;23;1;7D;3;24;1;84;3;16;1;87;3;B;1;C9;49;
FA;C5;9D;3F;91;5;58;0;A1;5;58;0;35;80;0;0;35;80;0;0;DA;2E;
FA;C6;9D;3F;35;80;0;0;35;80;0;0;35;80;0;0;35;80;0;0;77;38;
FA;C7;9D;3F;35;80;0;0;35;80;0;0;35;80;0;0;35;80;0;0;7B;38;
FA;C8;9D;3F;35;80;0;0;35;80;0;0;35;80;0;0;35;80;0;0;7F;38;
FA;C9;9D;3F;80;6;2A;0;35;80;0;0;A7;6;1A;0;C9;6;3E;0;5E;29;
FA;CA;9D;3F;E3;6;3A;0;FD;6;3E;0;1F;7;3A;0;38;7;35;0;B9;40;
FA;CB;9F;3F;65;7;29;0;BC;6;2E;0;9F;7;2C;0;C6;7;29;0;35;7B;
FA;CC;9F;3F;EF;7;27;0;35;80;0;0;48;8;25;0;6C;8;26;0;8D;72;
FA;CD;9F;3F;35;80;0;0;E2;6;14;0;62;7;A;0;39;7;E;0;F1;58;
FA;CE;9F;3F;2D;7;11;0;31;7;10;0;4;7;E;0;EB;6;10;0;E2;5E;
FA;CF;9F;3F;CD;6;12;0;CA;6;17;0;E6;6;9;0;1B;7;7;0;9;22;
FA;D0;9F;3F;35;80;0;0;35;80;0;0;35;80;0;0;DD;D;C;0;F9;55;
FA;D1;9D;3F;35;80;0;0;35;80;0;0;35;80;0;0;35;80;0;0;A3;38;
FA;D2;9D;3F;35;80;0;0;35;80;0;0;35;80;0;0;35;80;0;0;A7;38;
FA;D3;9D;3F;35;80;0;0;D3;F;9;0;A2;F;D;0;9C;F;C;0;4C;47;
FA;D4;9D;3F;B1;F;C;0;68;F;C;0;25;F;F;0;6B;F;C;0;6D;76;
FA;D5;9D;3F;83;F;F;0;36;F;C;0;59;F;D;0;59;F;C;0;65;5B;
FA;D6;9D;3F;7D;F;E;0;30;F;12;0;3F;F;11;0;72;E;B;0;3A;55;
FA;D7;92;3F;35;80;0;0;3F;F;E;0;35;80;0;0;C4;C;8;0;E3;28;
FA;D8;92;3F;20;B;8;0;18;B;7;0;46;B;6;0;49;B;D;0;48;70;
FA;D9;92;3F;E4;A;9;0;35;80;0;0;60;B;11;0;34;B;8;0;A6;76;
FA;DA;92;3F;44;B;12;0;17;B;9;0;20;B;9;0;D4;A;5;0;BA;2;
FA;DB;92;3F;C2;A;10;0;61;B;7;0;35;80;0;0;35;80;0;0;A8;5D;
FA;DC;92;3F;2A;C;9;0;35;80;0;0;7A;C;8;0;35;80;0;0;5C;C;
FA;DD;B5;3F;35;80;0;0;35;80;0;0;A6;C;7;0;E3;C;8;0;D2;4D;
FA;DE;B5;3F;56;D;6;0;8C;C;8;0;35;80;0;0;AF;D;7;0;A1;8;
FA;DF;B5;3F;DA;D;7;0;35;80;0;0;40;D;7;0;F5;D;7;0;9B;28;
FA;E0;B5;3F;AA;E;C;0;5D;E;6;0;F0;D;7;0;BB;D;8;0;30;5C;
FA;E1;B5;3F;66;D;7;0;46;D;9;0;35;80;0;0;9C;8;12;0;22;1E;
FA;E2;B5;3F;C7;8;8;0;7F;8;8;0;88;8;B;0;5B;8;9;0;21;78;
FA;E3;C3;3F;35;80;0;0;6;4;3F;0;2;4;78;0;23;5;5;0;FC;6;
FA;E4;C3;3F;1E;5;4C;0;E;5;41;0;9;5;2B;0;35;80;0;0;4A;2C;
FA;E5;C3;3F;86;3;55;0;71;3;9D;0;65;3;B1;0;5E;3;BF;0;B3;30;
FA;E6;C3;3F;5A;3;D0;0;59;3;D2;0;5B;3;C9;0;61;3;B7;0;D5;39;
FA;E7;C3;3F;6C;3;85;0;82;3;3B;0;AC;8;8;0;A9;8;7;0;2D;5D;
FA;E8;C3;3F;BA;8;7;0;E1;8;7;0;35;80;0;0;35;80;0;0;9A;38;
FA;E9;E1;3F;35;80;0;0;FE;8;8;0;1;9;9;0;35;80;0;0;2;5D;
FA;EA;E1;3F;1B;8;5;0;E6;7;D;0;35;80;0;0;E8;7;7;0;C;77;
FA;EB;E1;3F;E3;7;9;0;1;8;C;0;44;8;C;0;37;8;F;0;A7;20;
FA;EC;E1;3F;4E;8;13;0;E2;7;1B;0;CF;7;2C;0;AB;7;29;0;95;51;
FA;ED;E1;3F;6F;7;E;0;55;7;22;0;63;7;29;0;66;7;32;0;BB;4B;
FA;EE;E1;3F;7F;7;25;0;9B;7;35;0;91;7;32;0;A2;8;14;0;5D;67;
FA;EF;DD;3F;AA;8;13;0;13;8;6;0;35;8;9;0;2B;8;8;0;F4;3;
FA;F0;DD;3F;88;7;13;0;1B;7;E;0;E5;6;1F;0;B6;6;1B;0;78;47;
FA;F1;DD;3F;3F;6;2A;0;DB;5;38;0;7D;5;30;0;A;6;5;0;F0;76;
FA;F2;DD;3F;F4;5;4A;0;3E;6;11;0;2;6;11;0;C3;5;14;0;91;66;
FA;F3;DD;3F;8E;5;19;0;5D;5;19;0;2D;5;20;0;6;5;19;0;D3;3;
FA;F4;DD;3F;E2;4;1E;0;BA;4;24;0;A4;4;25;0;89;4;28;0;48;16;
FA;F5;DC;3F;85;4;3A;0;84;4;47;0;87;4;3C;0;8F;4;2D;0;C0;68;
FA;F6;DC;3F;9A;4;3A;0;A4;4;3A;0;B6;4;2B;0;BE;4;2F;0;8;78;
FA;F7;DC;3F;DC;4;2B;0;EF;4;2C;0;5;5;24;0;2;80;0;0;84;16;
FA;F8;DC;3F;F;7;17;0;6A;6;16;0;3C;6;22;0;30;6;19;0;2D;6F;
FA;F9;DC;3F;1B;6;20;0;3;6;20;0;EA;5;2C;0;D3;5;1E;0;13;68;

FA = Startbyte

Endbyte ist hier also nicht vorhanden

Nun zu meiner Frage:

Wie ist der übliche Weg hier ein 22 Byte Packet erfolgreich in ein Array abzuspeichern und somit dieses dann weiter auszuwerten ? Das scheint ja nicht so trivial zu sein. Wäre euch sehr verbunden wenn ihr mir helfen könntet.

Grüße

PS : Bin auch dankbar über jeden Code Snippet der mir hier den Einstieg erleichtert

Du hast es doch schon fast.

byte zeile[22];
int index;

void setup() {

  Serial.begin(230400);
  Serial3.begin(115200);
}

void loop() {
int inByte;
  if (Serial3.available()) {

    inByte = Serial3.read();

    if (inByte==0xfa){
      index = 0; // neue Zeile
    }
    zeile[index++] = inByte;  // in zeile[index] screiben und danach index erhöhen
    if (index == 22) {
      // alles da, mach was
    }
  }
}

Gruß Tommy

TippiToppi Tommy! Danke. Kurze Verständnisfrage, warum hast das Array mit einem byte deklariert und nicht bspw. als int ?

Weil ein Zeichen nicht größer als ein Byte ist (ohne Unicode zu betrachten). Da wäre int Speicherverschwendung und die sollte man sich bei den Arduinos nicht erst angewöhnen.

Man könnte auch index noch als byte definieren.
Bei inByte ist es Ansichtssache, weil SerialX.read() ein int zurück gibt (-1, wenn nichts da ist). Wenn man das auswerten will, ist int notwendig.

Gruß Tommy

Supi, dann mal vielen Dank und dir einen angenehmen Samstag noch