Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Failed to send data from arduino

I have connected the android application to the arduino successfully but it seems that i can't get the data even though I used the input stream ... I dont know whats wronge been looking and trying other solution for couple of days ..

Android Studio Code:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bluetooth = new BluetoothSPP(this);
    text = (TextView) findViewById(R.id.textView2);
    connect = (Button) findViewById(R.id.connect);
    on = (Button) findViewById(R.id.on);
    BluetoothSocket socket = null;
    mAdapter = BluetoothAdapter.getDefaultAdapter();

    if (!bluetooth.isBluetoothAvailable()) {
        Toast.makeText(getApplicationContext(), "Bluetooth is not available", Toast.LENGTH_SHORT).show();
        finish();
    }

    bluetooth.setBluetoothConnectionListener(new BluetoothSPP.BluetoothConnectionListener() {
        public void onDeviceConnected(String name, String address) {
            connect.setText("Connected to " + name);
        }

        public void onDeviceDisconnected() {
            connect.setText("Connection lost");
        }

        public void onDeviceConnectionFailed() {
            connect.setText("Unable to connect");
        }
    });

    connect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (bluetooth.getServiceState() == BluetoothState.STATE_CONNECTED) {
                bluetooth.disconnect();
            } else {
                Intent intent = new Intent(getApplicationContext(), DeviceList.class);
                startActivityForResult(intent, BluetoothState.REQUEST_CONNECT_DEVICE);
            }


        }
    });


    on.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


        }


    });

    /*off.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            bluetooth.send(OFF, true);
        }
    });*/




}






 public void onStart() {
    super.onStart();
    if (!bluetooth.isBluetoothEnabled()) {
        bluetooth.enable();
    } else {
        if (!bluetooth.isServiceAvailable()) {
            bluetooth.setupService();
            bluetooth.startService(BluetoothState.DEVICE_OTHER);
        }
    }
}

< /* class ConnectedThread extends Thread {
        private InputStream mInStream;

    public ConnectedThread(BluetoothSocket socket) throws IOException {
        InputStream tmpIn = null;


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

        } catch (IOException e) {
        }

        mInStream = tmpIn;

    }
}


    public void run() {
        BufferedReader r = new BufferedReader(new InputStreamReader(mInStream));

        while (true) {
            try {
                int a = r.read();

                Log.d(TAG, Integer.toString(a));


            } catch (IOException e) {
                break;
            }
        }
    }
}*/

void beginListenForData() {
    final Handler handler = new Handler();
    final byte delimiter = 10; //This is the ASCII code for a newline character

    stopWorker = false;
    readBufferPosition = 0;
    readBuffer = new byte[1024];
    workerThread = new Thread(new Runnable() {
        public void run() {
            while (!Thread.currentThread().isInterrupted() && !stopWorker) {
                try {
                    int bytesAvailable = mmInputStream.available();
                    if (bytesAvailable > 0) {
                        byte[] packetBytes = new byte[bytesAvailable];
                        mmInputStream.read(packetBytes);
                        for (int i = 0; i < bytesAvailable; i++) {
                            byte b = packetBytes[i];
                            if (b == delimiter) {
                                byte[] encodedBytes = new byte[readBufferPosition];
                                System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
                                final String data = new String(encodedBytes, "US-ASCII");
                                readBufferPosition = 0;

                                handler.post(new Runnable() {
                                    public void run() {
                                        text.setText(data);
                                    }
                                });
                            } else {
                                readBuffer[readBufferPosition++] = b;
                            }
                        }
                    }
                } catch (IOException ex) {
                    stopWorker = true;
                }
            }
        }
    });

    workerThread.start();
}
void closeBT() throws IOException {
    stopWorker = true;
    mmOutputStream.close();
    mmInputStream.close();

    text.setText("Bluetooth Closed");
}



public void onDestroy() {
    super.onDestroy();
    bluetooth.stopService();
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == BluetoothState.REQUEST_CONNECT_DEVICE) {
        if (resultCode == Activity.RESULT_OK)
            bluetooth.connect(data);
    } else if (requestCode == BluetoothState.REQUEST_ENABLE_BT) {
        if (resultCode == Activity.RESULT_OK) {
            bluetooth.setupService();
        } else {
            Toast.makeText(getApplicationContext()
                    , "Bluetooth was not enabled."
                    , Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

Arduino Code:

enter image description here

like image 838
ghanemkm Avatar asked Apr 13 '19 18:04

ghanemkm


1 Answers

You don't need InputStream and OutputStream as you are not using native android RFCOMM bluetooth api. I googled BluetoothSPP class and find out you were using this github library for blutooth spp communication: akexorcist/Android-BluetoothSPPLibrary

Your code seem to work for connecting / disconnecting to your arduino device. So, I deem you proprely integrated the library. What is missing is the code to send / receive bluetooth data. I updated your code as following:

on.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    bluetooth.send("ON", true);
}
});

off.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        bluetooth.send("OFF", true);
    }
});

bluetooth.setOnDataReceivedListener(new OnDataReceivedListener() {
    public void onDataReceived(byte[] data, String message) {
         Toast.makeText(getApplicationContext(), String.format("Data Received: %s", message), Toast.LENGTH_SHORT).show();
    }
});
like image 186
Hichem BOUSSETTA Avatar answered Oct 12 '22 03:10

Hichem BOUSSETTA