2010-04-09 10 views
11

Soy un poco nuevo en esto, así que tengan paciencia, realmente agradecería su ayuda.Interfaz Android Nexus One con Arduino + BlueSmirf

Estoy tratando de vincular el Android Nexus One con un arduino (Duemilanove) que está conectado a un BlueSmirf. Tengo un programa que simplemente está enviando la cadena "Hola Bluetooth" a cualquier dispositivo al que esté conectado BlueSmirf. Aquí está el programa Arduino:

void setup() { Serial.begin (115200); int i; }

void loop() {Serial.print ("¡Hola Bluetooth!"); retraso (1000); }

Uno de los terminales BT de mi computadora Puedo ver el mensaje y conectarlo sin problemas. El problema es con mi código de Android. Puedo conectarme al dispositivo con Android, pero cuando miro el registro no aparece "Hola Bluetooth". Aquí está el registro de depuración:


04-09 16: 27: 49.022: ERROR/BTArduino (17288): FireFly-2583 conectado
04-09 16: 27: 49.022: ERROR/BTArduino (17288): a partir para conectar la toma
04-09 16: 27: 55.705: ERROR/BTArduino (17288): Recibido: 16
04-09 16: 27: 56.702: ERROR/BTArduino (17288): Recibido: 1
04- 09 16: 27: 56.712: ERROR/BTArduino (17288): Recibido: 15
04-09 16: 27: 57.702: ERROR/BTArduino (17288): Recibido: 1
04-09 16: 27: 57.702: ERROR/BTArduino (17288): Recibido: 15
04-09 16: 27: 58.704: ERROR/BTArduino (17288): Recibido: 1
04-09 16: 27: 58.704: ERROR/BTArduino (17288): Recibido: 15

ect ...

aquí está el código, estoy tratando de poner sólo el código relativo, pero si necesita más, por favor hágamelo saber:

private class ConnectThread extends Thread { 
    private final BluetoothSocket mySocket; 
    private final BluetoothDevice myDevice; 

    public ConnectThread(BluetoothDevice device) { 
     myDevice = device; 
     BluetoothSocket tmp = null; 
     try { 
      tmp = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      Log.e(TAG, "CONNECTION IN THREAD DIDNT WORK"); 
     } 
     mySocket = tmp; 
    } 
    public void run() { 
     Log.e(TAG, "STARTING TO CONNECT THE SOCKET"); 
     InputStream inStream = null; 
     boolean run = false; 
     //...More Connection code here... 

el código más relativa es aquí:

 byte[] buffer = new byte[1024]; 
     int bytes; 

     // handle Connection 
     try { 
      inStream = mySocket.getInputStream(); 
      while (run) { 
       try { 
        bytes = inStream.read(buffer); 
        Log.e(TAG, "Received: " + bytes); 
       } catch (IOException e3) { 
        Log.e(TAG, "disconnected"); 
       } 
      } 

Estoy leyendo bytes = inStream.read (buffer). Sé que los bytes son un número entero, así que intenté enviar enteros a través de bluetooth porque "bytes" era un número entero, pero aún así no tenía sentido.

Casi parece que está enviando velocidad de transmisión incorrecta. ¿Podría ser esto cierto?

Cualquier ayuda sería apreciada. Muchas gracias.

+0

Pruébalo con un combo writeln/readln en su lugar. –

Respuesta

1

Read() devuelve el número de bytes que se han leído correctamente en el búfer. Por lo tanto, en esta línea de código:

bytes = inStream.read(buffer); 

... Tu mensaje se encuentra en los primeros bytes de bytesbuffer (asumiendo que todo lo demás es correcto).Puede convertirlas a una cadena de este modo:

String message = new String(buffer, 0, bytes); 

que estoy pasando por alto una serie de cosas aquí (codificación, la concatenación de múltiples buffers, etc), pero esto debe empezar.

Cuestiones relacionadas