Hallo zusammen! Brauch einen Rat? Wie würdet ihr mehrere Befehle über Bluetooth versenden, viel wichtiger wie Empfangen. SPP ? Es geht um die Abfrage eines TemperaturSensors der verschieden Temperaturen liefert. Die einfache Abfrage klappt eine Befehl eine Antwort alle 1sec, aber bei zwei Abfragen obwohl logisch getrennt, kommt es zu einem durcheinander. Das ganze soll über eine APP Androide abgefragt werden . Danke für jede Hilfe
Berg T. schrieb: > Die einfache Abfrage klappt eine Befehl eine Antwort alle 1sec, aber bei > zwei Abfragen obwohl logisch getrennt, kommt es zu einem durcheinander. Wie trennst Du die "logisch"? Bei SPP gibt es für ein BT Gerät nur je einen Input- und Outputstream. Und ja, bei Abfragezeiten <1s könnten die Antworten in einer Übertragung zusammen ankommen. Dein Code muss die sich aus dem Stream herausklamüsern.
Hallo und Danke für die Antwort. Ich trenne die Logisch in dem ich sage. true/false Sende Befehl 1 ->warte auf Antwort1 -> wenn Antwort 1 da ->sende Befehl 2-> warte auf Antwort 2 -> sende Befehl 1. Das war halt ein Versuch
Hallo, hätte den jmd ein Tipp wie ich zwei Werte zeitgesteuert über Bluetooth abfragen kann? Danke
Berg T. schrieb: > Sende Befehl 1 ->warte auf Antwort1 -> wenn Antwort 1 da ->sende Befehl > 2-> warte auf Antwort 2 -> sende Befehl 1. > > Das war halt ein Versuch Den wir ohne Source Code nicht wirklich nachvollziehen können. Deine Prosa hilft da nix.
Hier Bitte.
Senden 1 und 2 werden jeweils einer anderen Klasse zeitlich gesteuert
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
import android.R.integer;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothSocket;
import android.content.DialogInterface;
import android.os.Handler;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
public class EsbinBlueCon {
Timmer t = new Timmer();
private static final String LOG_TAG = "EsbinBlueCon";
public BluetoothAdapter adapter;
public BluetoothSocket socket = null;
public Set<BluetoothDevice> pairedDevices;
public OutputStream stream_out = null;
public InputStream stream_in = null;
public boolean is_connected = false;
public String mac_adresse; // MAC Adresse des Bluetooth Adapters
public UUID myUUid =
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
public float tempC = 0;
public float tempUM = 0;
public boolean is_send = false;
public boolean is_send2 = false;
public boolean sendErr= false;
public boolean setTempUM= false;
public String HEXTEMPC;
public String HEXTEMPUM;
public void verbinden(){
Log.d(LOG_TAG, "Verbinde mit " + mac_adresse);
BluetoothDevice remote_device =
adapter.getRemoteDevice(mac_adresse);
try {
socket =
remote_device.createRfcommSocketToServiceRecord(myUUid);
Log.d(LOG_TAG, "Socket erstellt");
} catch (Exception e) {
Log.e(LOG_TAG, "Socket Erstellung fehlgeschlagen: " +
e.toString());
}
adapter.cancelDiscovery();
// Socket verbinden
try {
socket.connect();
Log.d(LOG_TAG, "Socket verbunden");
is_connected = true;
} catch (IOException e) {
is_connected = false;
Log.e(LOG_TAG, "Socket kann nicht verbinden: " +
e.toString());
}
// Socket beenden, falls nicht verbunden werden konnte
if (!is_connected) {
try {
socket.close();
} catch (Exception e) {
Log.e(LOG_TAG,
"Socket kann nicht beendet werden: " +
e.toString());
}
}
// Outputstream erstellen:
try {
stream_out = socket.getOutputStream();
Log.d(LOG_TAG, "OutputStream erstellt");
} catch (IOException e) {
Log.e(LOG_TAG, "OutputStream Fehler: " + e.toString());
is_connected = false;
}
// Inputstream erstellen
try {
stream_in = socket.getInputStream();
Log.d(LOG_TAG, "InputStream erstellt");
} catch (IOException e) {
Log.e(LOG_TAG, "InputStream Fehler: " + e.toString());
is_connected = false;
}
}
private Timer timer1 = new Timer();
public long CTime(){
Log.e(LOG_TAG, "CTIME: " + t.getTotalTime());
return t.getTotalTime();
}
public void checkSenden (){
try {
if(stream_in.available() > 0){
t.end();
}else{
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void senden() {
t.start();
if( is_send==true){
is_send2=false;
byte[] message = new byte[]{0x3e, 0x02, 0x00};
byte[] msgBuffer = (message);
if (is_connected) {
Log.d(LOG_TAG, "Sende Nachricht: " + message);
Log.d(LOG_TAG, "STARTTIME");
try {
stream_out.write(msgBuffer);
} catch (IOException e) {
Log.e(LOG_TAG,
"Bluetest: Exception beim Senden: " +
e.toString());
}
}
Log.e(LOG_TAG, "is_send (senden): " + is_send);
Log.e(LOG_TAG, "is_send2:(senden): " + is_send2);
}
}
public void empfangen() {
checkSenden();;
if( is_send==true){
byte[] buffer = new byte[4]; // Puffer
int laenge; // Anzahl empf. Bytes
try{
if (stream_in.available() > 0) {
String msg="";
laenge = stream_in.read(buffer);
for (int i = 0; i < laenge; i++) {
msg += String.format("%02x", buffer[i]);
HEXTEMPC=msg;
Log.d(LOG_TAG, "MessageMSG 1: " +msg);
if(msg.length()==4){
float decim = Integer.parseInt(msg,16);
tempC = ((decim-1000)/10);
}
}
if(msg.length()==2){
Log.d(LOG_TAG, "MESSFEHLER1");}
// String msg2="";
// t.end();
Log.d(LOG_TAG, "Anzahl empfangender Bytes: " +
String.valueOf(laenge));
Log.d(LOG_TAG, "MessageMSG 1LL: " + laenge);
// Message zusammensetzen und in HEX
konvertieren + umrechnen:
//Log.d(LOG_TAG, "MessageMSG 1L: " +
msg.length());
Log.d(LOG_TAG, "Message: " + tempC);
} //else{Log.e(LOG_TAG, "NICHTS EMPF");
buffer=null;
is_send=false;
is_send2=true;
Log.e(LOG_TAG, "is_send (empfangen): " + is_send);
Log.e(LOG_TAG, "is_send2:(empfangen): " + is_send2);
} catch (Exception e) {
Log.e(LOG_TAG, "Fehler beim Empfangen: " +
e.toString());
}
}
}
public void senden2() {
if( is_send2==true) {
is_send = false;
byte[] message = new byte[]{0x3e, 0x02, 0x02};
byte[] msgBuffer = (message);
if (is_connected) {
Log.d(LOG_TAG, "Sende Nachricht 2: " + message);
try {
stream_out.write(msgBuffer);
} catch (IOException e) {
Log.e(LOG_TAG,
"Bluetest: Exception beim Senden: " +
e.toString());
}
}
Log.e(LOG_TAG, "is_send (senden2): " + is_send);
Log.e(LOG_TAG, "is_send2:(senden2): " + is_send2);
}
}
public void empfangen2() {
Log.d(LOG_TAG, "SetTempUmg"+setTempUM);
if (is_send2 == true) {
byte[] buffer1 = new byte[4]; // Puffer
int laenge; // Anzahl empf. Bytes
try {
if (stream_in.available() > 0) {
Log.d(LOG_TAG, "NICHTS EME2");
String msg = "";
// String msg2="";
laenge = stream_in.read(buffer1);
Log.d(LOG_TAG,
"Anzahl empfangender Bytes2: " +
String.valueOf(laenge));
// Message zusammensetzen und in HEX konvertieren +
umrechnen:
for (int i = 0; i < laenge; i++) {
msg += String.format("%02x", buffer1[i]);
HEXTEMPUM = msg;
Log.d(LOG_TAG, "MessageMSG 2: " + msg);
if (msg.length() == 4) {
float decim = Integer.parseInt(msg, 16);
tempUM = ((decim - 1000) / 10);
}
if (msg.length() == 2) {
Log.d(LOG_TAG, "MESSFEHLER2");
}
}
Log.d(LOG_TAG, "Message 2: " + tempUM);
buffer1 = null;
is_send2 = false;
is_send = true;
Log.e(LOG_TAG, "is_send (empfangen2): " + is_send);
Log.e(LOG_TAG, "is_send2:(empfangen2): " + is_send2);
} else {
Log.e(LOG_TAG, "NICHTS EMPF2");
} //else Toast.makeText(this, "Nichts empfangen",
Toast.LENGTH_LONG).show();
//Toast.makeText(this, "Nichts empfangen",
Toast.LENGTH_LONG)
// .show();
} catch (Exception e) {
Log.e(LOG_TAG, "Fehler beim Empfangen2: " + e.toString());
}
}
}
public void trennen() {
if (is_connected && stream_out != null) {
is_connected = false;
is_send=false;
is_send2=false;
Log.d(LOG_TAG, "Trennen: Beende Verbindung");
try {
stream_out.flush();
socket.close();
} catch (IOException e) {
Log.e(LOG_TAG,
"Fehler beim beenden des Streams und
schliessen des Sockets: "
+ e.toString());
}
} else
Log.d(LOG_TAG, "Trennen: Keine Verbindung zum beenden");
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.