2

興味深い問題に直面しています。arduino との Bluetooth SPP リンクを確立するアプリをプログラムしました。Arduino の Bluetooth デバイスは 9600 ボーに設定されています。arduino からデータを受信できますが、値が 0 または高いピークのグリッチを受信して​​いるようです。グラフ部分に正確な値が必要であり、送信内容をファイルに記録するため、arduino が適切なデータを送信することがわかっているため、これはかなり面倒です。

「パッチ」を作成する平均または同様のものを作成するのではなく、なぜこれが起こっているのかを修正または理解しようとしています。

ご協力いただきありがとうございます。

これは私の問題を説明できる写真です.arduinoのデータ範囲は約101から103です:

スクリーンショット

そして、接続を作成してデータを受信するコードは次のとおりです。

private class ConnectedThread extends Thread {
    private final DataInputStream mmInStream;
    private final DataOutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket 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 = new DataInputStream(tmpIn);
        mmOutStream = new DataOutputStream(tmpOut);
    }

    public void run() {
        byte[] buffer = new byte[1024];  // buffer store for the stream
        int bytes; // bytes returned from read()

        // Keep listening to the InputStream until an exception occurs
        while (true) {
            try {
                // Read from the InputStream
                bytes = mmInStream.read(buffer);        // Get number of bytes and message in "buffer"
                hBluetooth.obtainMessage(RECEIVE_MESSAGE, bytes, -1, buffer).sendToTarget();        // Send to message queue Handler
            } catch (IOException e) {
                break;
            }
        }
    }

private void connectDevice() {


    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

    try {
        btSocket = createBluetoothSocket(device);
    } catch (IOException e) {
        errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
    }


    mBluetoothAdapter.cancelDiscovery();


    // Establish the connection.  This will block until it connects.
    Log.d(TAG, "...Connecting...");
    try {
      btSocket.connect();
      Log.d(TAG, "....Connection ok...");
      // Create a data stream so we can talk to server.
      Log.d(TAG, "...Create Socket...");

      mConnectedThread = new ConnectedThread(btSocket);
      mConnectedThread.start();
      mActionBar.setSubtitle("Connecté");

      //If fail, we disconnect or display an error warning regarding the situation
    } catch (IOException e) {
      try {
        btSocket.close();
        mActionBar.setSubtitle("Deconnecté");
      } catch (IOException e2) {
        errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
      }
    }

    return;
    }  

最後にハンドラー:

hBluetooth = new Handler() {
    public void handleMessage(android.os.Message msg) {
        switch (msg.what) {
        case RECEIVE_MESSAGE:                                                   // If we receive a message
            byte[] readBuf = (byte[]) msg.obj;
            String stringIncome = new String(readBuf, 0, msg.arg1);             // Create string from byte array
            stringBuilder.append(stringIncome);                                             
            int endOfLineIndex = stringBuilder.indexOf("\r\n");                 // Determine the end-of-line
            if (endOfLineIndex > 0) {                                           // If we are at the end-of-line we parsed all the data that was sent
                rmsgBluetooth = stringBuilder.substring(0, endOfLineIndex);     // The string is extracted in a string object rmsgBluetooth
                stringBuilder.delete(0, stringBuilder.length());                


                if(btSocket != null && btSocket.isConnected()){                 


                //Here we send the value of the string to a txtbox  
                txtArduino.setText("Arduino: " + rmsgBluetooth); 




                if(rmsgBluetooth.matches("-?\\d+(\\.\\d+)?")) {                
                    try{

                   sensorReading = Float.parseFloat(rmsgBluetooth);
                    }catch(NumberFormatException e){


                    }
                }   
4

1 に答える 1

0

文字列が解析されるときにエラーが発生する可能性が最も高いと思います。行を注意深くデバッグしてみてください

           if(rmsgBluetooth.matches("-?\\d+(\\.\\d+)?")) {                
                try{

               sensorReading = Float.parseFloat(rmsgBluetooth);
                }catch(NumberFormatException e){


                }
            }
于 2013-03-21T19:56:36.063 に答える