Empfangen von Daten von Arduino bluetooth-Gerät

Habe ich diesem Beispiel gefolgt: http://english.cxem.net/arduino/arduino5.php

Ich habe ein arduino uno board mit einem sparkfun bluetooth-Gerät. Ich kann verbinden und senden von Daten von android zu arduino und ich die Daten sehen pop-up in den serial monitor, aber ich kann nicht senden Sie die Daten vom arduino(serial monitor) und zurück zu Android.

Ich bin mit einem ConnectThread gestartet wird in der onResume-Methode der activity. Dies ist der code für meinen thread:

private class ConnectedThread extends Thread {
        private final BluetoothSocket mmSocket;
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;

        public ConnectedThread(BluetoothSocket socket) {
            Log.d("THREAD", "constructor");
            mmSocket = socket;
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            //Get the input and output streams, using temp objects because
            //member streams are final
            try {
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }

            mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }

        public void run() {
            Log.d("THREAD", "inside run" );
            byte[] buffer = new byte[256];  //buffer store for the stream
            int bytes; //bytes returned from read()

            //Keep listening to the InputStream until an exception occurs
            while (true) {
                Log.d("in loop", "waiting for data");
                try {
                    //Read from the InputStream
                    bytes = mmInStream.read(buffer);        //Get number of bytes and message in "buffer"
                    h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     //Send to message queue Handler
                    Log.d("recieve", "b " + bytes);
                } catch (IOException e) {
                    break;
                }
            }
        }

        /* Call this from the main activity to send data to the remote device */
        public void write(String message) {
            Log.d("TAG", "...Data to send: " + message + "...");
            byte[] msgBuffer = message.getBytes();
            try {
                mmOutStream.write(msgBuffer);
            } catch (IOException e) {
                Log.d("TAG", "...Error data send: " + e.getMessage() + "...");     
              }
        }

        /* Call this from the main activity to shutdown the connection */
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) { }
        }



    }

Benötige ich einen service, der immer wartet, bis Daten, da der serielle monitor nur Daten senden, wenn ich drücken Sie senden?

EDIT: Arduino-code:

    #include <SoftwareSerial.h>  

int bluetoothTx = 2;  //TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3;  //RX-I pin of bluetooth mate, Arduino D3

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
  Serial.begin(9600);  //Begin the serial monitor at 9600bps

  bluetooth.begin(115200);  //The Bluetooth Mate defaults to 115200bps
  bluetooth.print("$$$");  //Enter command mode
  delay(100);  //Short delay, wait for the Mate to send back CMD
  bluetooth.println("U,9600,N");  //Temporarily Change the baudrate to 9600, no parity
  //115200 can be too fast at times for NewSoftSerial to relay the data reliably
  bluetooth.begin(9600);  //Start bluetooth serial at 9600
}

   void loop()
{
  if(bluetooth.available())  //If the bluetooth sent any characters
  {
    //Send any characters the bluetooth prints to the serial monitor
    Serial.print((char)bluetooth.read());  
  }
  if(Serial.available())  //If stuff was typed in the serial monitor
  {
    char c = (char) Serial.read();
     //Send any characters the Serial monitor prints to the bluetooth
    bluetooth.print(c); 
  }
  //and loop forever and ever!
}
  • Hi oivindth, auch ich Stand vor dem ähnlichen problem wie deins und ich zufällig auch beziehen sich auf die gleiche Quelle wie die, die Sie haben. Sie haben erwähnt, Sie lösten dieses Problem mit einem Looper.bereiten Sie in den thread, könnten Sie bitte erklären, ein wenig mehr oder es wäre toll, wenn könnten Sie aktualisieren Sie Ihre Lösung auf die codes oben. Dank einem Haufen.
  • Hi @NicholasTJ. Added mich einfach Looper.prepare(); in meiner Run () - Methode. Wenn diese doesen ' T helfen, ich kann update-post mit code.
  • Ich habe es ausgeführt, aber nicht mit Looper.prepare(), na gut, ich glaube, ich habe einen Blick in "Looper".prepare() und sehen, was es tut. Aber, wenn Sie sind ok mit mir faul sein, ein update auf deinen code in deinem post wäre toll.
  • danke für den link.
InformationsquelleAutor oivindth | 2013-01-23
Schreibe einen Kommentar