Kannst du mal mehr Informationen geben als immer nur ein paar vage Häppchen? Jetzt ist es schon wieder was ganz anderes. Sag doch gleich was du tun willst.
Am einfachsten ist das:
void setup()
{
Serial.begin(9600);
int bewegung_X = 100;
int bewegung_Y = -2000;
int bewegung_Z = -5;
int bewegung_GEAR = 30;
char buffer[20];
snprintf(buffer, sizeof(buffer), "%d,%d,%d,%d", bewegung_X, bewegung_Y, bewegung_Z, bewegung_GEAR);
Serial.println(buffer);
int value1 = atoi(strtok(buffer, ","));
int value2 = atoi(strtok(NULL, ","));
int value3 = atoi(strtok(NULL, ","));
int value4 = atoi(strtok(NULL, ","));
Serial.println(value1);
Serial.println(value2);
Serial.println(value3);
Serial.println(value4);
}
void loop()
{
}
Schreibt erst alle Daten in einen String und zerpflückt ihn dann wieder. strtok() liefert dabei jedesmal einen Zeiger auf den nächsten Teil-String
Den Puffer dabei so groß machen dass auch wirklich alles reinpasst.
Man kann per UDP aber auch sehr einfach direkt Bytes schicken und sich den String Kram vollkommen sparen. Einfach die Daten in eine union aus einem struct und einem Byte Array packen. Und schon hat man alles direkt in Variablen ohne irgendwas zu konvertieren:
union Data
{
byte asArray[sizeof(int) * 4];
struct
{
int bewegung_X;
int bewegung_Y;
int bewegung_Z;
int bewegung_GEAR;
};
};
void setup()
{
Serial.begin(9600);
Data data;
data.bewegung_X = 100;
data.bewegung_Y = -2000;
data.bewegung_Z = -5;
data.bewegung_GEAR = 30;
//nur als Test alle Bytes des Arrays ausgeben
for (unsigned int i = 0; i < sizeof(data); i++)
Serial.println(data.asArray[i]);
}
void loop()
{
}
Du schreibst die Daten in das struct. Durch die union belegen sie dann den gleichen Speicherplatz wie das Array. Das Array kannst du dann so versenden:
udp.write(data.asArray, sizeof(data));
Lesen geht anders herum. Du liest in das Array ein und hast direkt die Daten in den Variablen
Das ist eigentlich der übliche Weg in diesem Fall. Braucht keinen zusätzlichen Speicher für die Konvertierungsfunktionen