Fragen zu senden und empfangen von Hex werten über das Netzwerk

Hallo alle zusammen,

ich bin fast am verzweifeln ich Programiere zur zeit ein kleines Programm mit TCP funktion.

Mit dem Empfangen und Senden von Daten klappt alles recht gut nur das Weiterbearbeiten macht mir ein paar Probleme.
So ich connecte auf einen Server der mir auf Port 2010 Datenpakete zuschickt, zur zeit lese ich die mit der Funktion client.read() aus.

Und bekomme das Folgende einzelne Ergebnisse:

0xEF, 0xBE, 0xAD, 0xDE, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x3C, 0x1D, 0x82, 0x4C, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00

Nun möchte ich gerne mit bestimmten Hex werten berechnungen anstellen z.B. mit dem 5,6 und 7 wert da diese mir die Länge der übertragung angeben dazu müsste ich diese dann zusammenrechnen das ich 0x000020 habe und dan so auf die 32 komme.

Das will bei mir nicht so funktionieren ich habs schon mit einem array versucht wobei ich die daten mit client.read() einfach einlese ist das ein richtiger ansatz ? Oder gibt es einen besseren Weg ?

Ein änliches Problem ensteht beim Senden dort will ich bestimmte Hex werte durch eine Rechnung bearbeiten und dann versenden zurzeit hab ich alle Hex Werte in einen array und sende diese dann mit client.write(command, sizeof(command)); raus

byte command[] = {0xEF, 0xBE, 0xAD, 0xDE, 0x20, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xAC, 0xA5, 0x51, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F};

Nun würde ich gerene hier die letzen 4 Pakete durch eine Formel Berechnen lassen,
wie kann mann dies am besten umsetzen ?

Würde mich über ein paar hilfreiche Tipps freuen.

sysLINK

Ich sehe das Problem nicht wirklich. Wenn das Versenden an sich klappt sollte der Rest eigentlich trivial sein.

Das will bei mir nicht so funktionieren ich habs schon mit einem array versucht wobei ich die daten mit client.read() einfach einlese ist das ein richtiger ansatz ? Oder gibt es einen besseren Weg ?

Passt schon. Array der entsprechenden Größe anlegen. Den Index mitzählen und dann entsprechend oft read() machen.

Alternativ geht vielleicht auch das:
http://arduino.cc/en/Reference/StreamReadBytes
readBytes() kann man ähnlich wie write() einen Puffer und eine Länge übergeben. Dann liest die Methoden selbstständig entsprechend viele Bytes in den Puffer. Vorher sollte man mit available() abfragen ob wirklich 32 Bytes da sind.

Wobei sich das fast so anhört als ob deine Pakete eine variable Länge habe. Dann musst du erst die Längen-Bytes auslesen, die Länge berechnen und dann entsprechend viele Bytes danach einlesen.

Du kannst das Array zum Senden so deklarieren (wenn ich richtig gezählt habe):

byte command[32] = 
{
   0xEF, 0xBE, 0xAD, 0xDE, 0x20, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x0C, 0x00, 0x00, 0x00, 0xAC, 0xA5, 0x51, 0x03,
   0x00, 0x00, 0x00, 0x00
};

Dann werden die letzten 4 Werte auf 0 gesetzt auch wenn du sie nicht explizit initialisierst. Aber der Speicher ist immerhin da

Oder so:

byte command[] = 
{
   0xEF, 0xBE, 0xAD, 0xDE, 0x20, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x0C, 0x00, 0x00, 0x00, 0xAC, 0xA5, 0x51, 0x03,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

Und die vier Indizes danach einfach mit dem Subscript Operator auf deine berechneten Werte setzen bevor du es sendest.

Auslesen geht genauso mit und dem entsprechenden Index. z.B.:

unsigned long length = ((unsigned long)command[6] << 16) + ((unsigned int)command[5] << 8) + command[4];

Jo danke für den Tipp
Der erste Test mit dem Auslesen gerade hatt gut geklappt nur ist mir aufgefallen das bei 2 von 5 versuchen das Board
nach ca 2 Minuten aufgehangen hatt und nichts mehr ausgewertet hatt.
Ich vermute das der UNO das nicht mehr schaft wenn zu viele daten reinkommen mit dem Auswerten.
Gibts da eigentlich was zu beachten bei der menge die der Auswerten kann?