# Datenprotokoll für Graphview



## hansamann (30. Jan 2015)

Hi Leute,
vielleicht könnt ihr mir ja helfen.
ich schreibe gerade eine App für Android, welche gesendete Daten über Bluetooth empfängt und diese in mittels Graphview darstellen soll.
Die Bluetoothverbindung und den allg. Empfang habe ich schon hinbekommen. 
Ich kriege es aber nicht hin die ankommenden Daten in einzelne Pakete zu packen.
Der Sensor schickt mir einzelne Bytes (unit8_t) seriell rüber. Vier von diesen Bytes ergeben einen Messwert.
Bisher habe ich die Daten in einer buffer geschrieben und kann auch alle anzeigen. Leider immer nur alle! Wie kann ich sie trennen, sodass ich z.B.: 

float[0] = speed_x;
float[2] = speed_y;
...

schreiben kann?
Wär super wenn mir da einer weiterhelfen kann. Bin eher ein Anfänger in java.


----------



## strußi (5. Feb 2015)

wie wär es mit einem Scanner der dir immer vier byte ausliest? mit while bis weniger als 4 byte überrig sind?

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 4.7 Zerlegen von Zeichenketten


----------



## hansamann (5. Feb 2015)

Danke für die Antwort. 
Das mit dem verpacken der Daten habe ich nun hinbekommen.


```
byte[] readBuffer = (byte[])msg.obj;
				ByteArrayInputStream byteArrayInput = new ByteArrayInputStream(readBuffer);
				DataInputStream dataInput = new DataInputStream(byteArrayInput);
				float[] floats = new float[readBuffer.length / 4];				
				for(int init = 0; init < floats.length - Len_Header; init++)
					try {
						floats[init] = dataInput.readFloat();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				tvT1.setText(Float.toString(floats[0]));
				tvT2.setText(Float.toString(floats[1]));
				tvT3.setText(Float.toString(floats[2]));
				tvT4.setText(Float.toString(floats[3]));
				tvT5.setText(Float.toString(floats[4]));
				tvT6.setText(Float.toString(floats[5]));
				tvT7.setText(Float.toString(floats[6]));
				tvT8.setText(Float.toString(floats[7]));
				tvT9.setText(Float.toString(floats[8]));
				tvT10.setText(Float.toString(floats[9]));
				tvT11.setText(Float.toString(floats[10]));
				tvT12.setText(Float.toString(floats[11]));
				tvT13.setText(Float.toString(floats[12]));
				tvT14.setText(Float.toString(floats[13]));
```

Leider werden die Daten mir nur durch die Textviews durchgereicht. Dabei soll aber jedem Textview auch ein float[]-Wert zugeordnet sein.
Im Protokoll habe ich zwei Startbytes (beide 0xF1). Ich versuche diese gerade in das Programm so einzubauen, dass das array immer dann gefüllt wird, wenn die ersten bytes die Startbytes sind.
Ich weiß aber noch nicht genau wie ich das implementieren soll. Eventlistener?


----------

