Auslesen Serial Port Hex Daten

Hallo zusammen,

ich bin langsam am verzweifeln.

Ich habe mehrere Varianten probiert.

Ich müsste am Serial port einen HexString abfragen

Aber irgendwie habe ich eine Bitverschiebung oder sonst was drin

Es sollen 5 Werte übertragen werden:

Sobald ich nur 2 sende funktioniert das mit diesen Code

   if(Serial1.available()){

        EmpfangeneDaten += char(Serial1.read());
        if (EmpfangeneDaten.length() > 8) EmpfangeneDaten = "";
        
    if (EmpfangeneDaten.length() == 8) {
    value.charByte[0] = char(EmpfangeneDaten[0]);
    value.charByte[1] = char(EmpfangeneDaten[1]);
    value.charByte[2] = char(EmpfangeneDaten[2]);
    value.charByte[3] = char(EmpfangeneDaten[3]);
    Daten1= value.valLong;
    value.charByte[0] = char(EmpfangeneDaten[4]);
    value.charByte[1] = char(EmpfangeneDaten[5]);
    value.charByte[2] = char(EmpfangeneDaten[6]);
    value.charByte[3] = char(EmpfangeneDaten[7]);
    Daten2 = value.valLong;

    EmpfangeneDaten = "";

Aber sobald ich erweitere spielt alles verrückt....

So bekomme ich die 2 Werte (jeweils 10) rein

0A 00 00 00 0A 00 00 00

Hier als String: \x0A\x00\x00\x00\x0A\x00\x00\x00

Vielleicht hat jemand ein Tip...
Oder einen anderen Weg :wink:

Wäre sehr dankbar..

EDIT:
Achja hier die Deklaration


String EmpfangeneDaten = ""; // Platzhalterstring für die Daten

int Daten1;
int Daten2;

union {
  char charByte[8];
  long valLong;
} value;

noch was vergessen: sender code

du meinst wohl

union {
  char charByte[8][4];
  long valLong;
} value;

Ich prüfe...

Was ist wenn ich von 2 auf 4 oder sogar 5 erhöhe?

Vllt hab ich eine Gedankenwolle.....

Was genau brauchst du beim Sender Code?

incompatible types in assignment of 'char' to 'char [4]'

Wieso fragst du?

Ich bekomme hier nur Rohdaten

Hallo,
mir ist überhaupt nicht klar was Du da vor hast. Vermutlich willst Du das was über die Schnittstelle reinkommt mit einer oder mehreren vorgegeben Zeichenketten Zeichenkette vergleichen.

value.charByte[0] = char(EmpfangeneDaten[0]);

EmpfangeDaten ist ein String objekt wenn dahinter eine eckige Klammer steht müsste ein Array von dem String deklariert sein. Wenn Du auf ein einzelnes Zeichen eines String Objektes zugreifen willst geht da was mit empfangeneDaten.substring().
Zudem überschreibst Du im zweiten Teil die Daten Deiner Struct ja wieder.

Du könntest für Deine Empfangsdaten eine C Zeichenkette verwenden und dann mit strncmp vergleichen.
Heinz

a) mach einen VOLLSTÄNDIGEN Code und poste ihn
b) dazu zwei MUSTER Nachrichten posten
c) für jede Muster Nachricht beschreiben

  • Was soll rauskommen
  • Was kommt tatsächlich raus

Üblicher Lesestoff:
Serial Input Basics - updated - Using Arduino / Introductory Tutorials - Arduino Forum

P.S.:
"Serielles Lesen" Threads laufen üblicherweise so ab:

  • Datenlesen nach Methoden aus "Serial Input Basic"
  • Die Erkenntnis, dass in 98% der Fälle auf der Schnittstelle nicht Dec, Hex oder sonstiges "übertragen" wird, sondern einfach jedes Byte ... (das sich dann bei der Textausgabe in DEC, HEX, BIN ... darstellen lässt)
  • Die Überraschung, wenn man Ende der Übertragung doch noch ein ZeilenEnde und/oder Carriage Return kommt

Gefühlt kommen derartige Themen alle 10 Tage.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.