Send whole type data via Bluetooth connection between android and Uino

Asked

Viewed 842 times

0

I made a method to allow sending strings from android to Arduino through bluetooth and I succeeded! However the question arose of how it would be to send data of type 'int', following this same idea.

How would be the code of this application? Below I make available what I did, both on android and in Rduino.

I was able to connect with Arduino, but when I move the seekBr program closes and gives error!

Anyone who can help me thank you!

------------------------------------------------------------ On android --------------------------------------------------------

package com.example.seekbar1;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Toast;



  @SuppressLint("HandlerLeak")
public class MainActivity extends Activity {

  SeekBar seekBar;

  private BluetoothSocket btSocket = null;

  final int handlerState = 0;

  private static final int SolicitaAtivaçao = 1;

  private static final int SolicitaConexao = 2;

  Handler bluetoothIn;

  private ConnectedThread mConnectedThread;

  //Entrada das informações para fazer a interação entre o celular e o módulo bluetooth
  private BluetoothAdapter meuBluetooth = null;

  // SPP UUID service - isso deve funcionar para a maioria dos dispositivos
  private static final UUID MEU_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

  // String para o endereço MAC
  //quando usa lista de dispositivos, se não colocar igual a null da erro
  private static String MAC = null;

TextView textViewMedida, txtStringTamanho, txtString;

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



    //obtém o adaptador local bluetooth
    meuBluetooth = BluetoothAdapter.getDefaultAdapter();

    //Verifica se o didpositivo tem bluetooth
            if(meuBluetooth == null){
                //Se não tiver, a mensagem abaixo será mostrada e o programa será encerrado
                Toast.makeText(getApplicationContext(), "Seu dispositivo não possui bluetooth", Toast.LENGTH_LONG).show();
                finish();
                return;
            }

            //Se o bluetooth não estivver ativado, será solicitada a ativação do mesmo 
            //Através do intent, que inicia uma nova ação
            if(!meuBluetooth.isEnabled()){
                Intent solicita = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//Cria o intent
                startActivityForResult(solicita,SolicitaAtivaçao);//Starta o intent         
            }   

            seekBar = (SeekBar) findViewById(R.id.seekBar1);
            seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    try{

                    mConnectedThread.write(progress);
                    }catch(Exception e){
                        Toast.makeText(getApplicationContext(), "Erro"+e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode){

    case SolicitaAtivaçao:
        if(resultCode ==Activity.RESULT_OK)//Se o bluetooth for ligado, a mensagem abaixo será mostrada
        {                                   //E o progrma continuará sendo executado
            Toast.makeText(getApplicationContext(), "O BLUETOOTH FOI LIGADO!", Toast.LENGTH_LONG).show();
        }else//Se o bluetooth não foi ativado, a mensagem abaixo será mostrada e o programa será fechado
        {
            Toast.makeText(getApplicationContext(), "O BLUETOOTH NÃO FOI LIGADO!", Toast.LENGTH_LONG).show();
            finish();
        }
        break;

    case SolicitaConexao:
        if(resultCode==Activity.RESULT_OK){             
            MAC = data.getExtras().getString(ListadeDispositivos.EnderecoMAC);

            //Para se ter um bluetoothdevice é necessário uilizar o BluetoothAdapter.getRemoteDevice(string)
            //Que representa um endereço Mac conhecido, que já foi apresentado no início
            BluetoothDevice device = meuBluetooth.getRemoteDevice(MAC);             
            try{
                //A função device.createRfcommSocketToServiceRecord(MEU_UUID) abre m conexão 
                //Entre o dispositivo e o módulo
                btSocket = device.createRfcommSocketToServiceRecord(MEU_UUID);
                //É iniciada a saída d dados do dispositivo
                btSocket.connect(); 

                //Se der tudo certo na hora da conexão, irá aparecer a tela do controle
                if(btSocket!=null){
                Toast.makeText(getApplicationContext(), "A CONEXÃO FOI BEM SUCEDIDA!", Toast.LENGTH_LONG).show();

                mConnectedThread = new ConnectedThread(btSocket);
                mConnectedThread.start();

                }
            }catch(IOException e){
                Toast.makeText(getApplicationContext(), "ERRO AO FAZER CONEXÃO", Toast.LENGTH_LONG).show();
            }   

        }else{
            Toast.makeText(getApplicationContext(), "Falha ao obter o endereço MAC", Toast.LENGTH_LONG).show();
        }
    break;
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.Conectar) {

        conectar();

        return true;
    }
    if (id ==R.id.Desconectar){

        if(btSocket !=null){

        desconectar();
        }else{
            Toast.makeText(MainActivity.this, "O módulo bluetooth não está conectado", Toast.LENGTH_LONG).show();
        }

        return true;
    }
    return super.onOptionsItemSelected(item);
}

//Definição da função conectar
public void conectar(){     
    Intent abreLista = new Intent(MainActivity.this,ListadeDispositivos.class);
    startActivityForResult(abreLista, SolicitaConexao);     
}

//Definição da função desconectar
public void desconectar(){
    try{
        btSocket.close();//Fecha a conexão
        btSocket = null;//E a conexão volta a ser nula

    }catch(IOException e){

    }
}



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

        //creation of the connect thread
        public ConnectedThread(BluetoothSocket socket) {
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            try {
                //Create I/O streams for connection
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }

            mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }

        public void run() {
            byte[] buffer = new byte[256];
            int bytes; 

            // Keep looping to listen for received messages
            while (true) {
                try {
                    bytes = mmInStream.read(buffer);            //read bytes from input buffer
                    String readMessage = new String(buffer, 0, bytes);
                    // Send the obtained bytes to the UI Activity via handler
                    bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }
        //Usado para enviar mensagens
        public void write(int input) {
            try {
                mmOutStream.write(input);                //write bytes over BT connection via outstream
            } catch (IOException e) {
                //if you cannot write, close the application
                Toast.makeText(getBaseContext(), "Connection Failure", Toast.LENGTH_LONG).show();
                finish();

              }
            }
        }

    }

------------------------------------------------------------ In the West --------------------------------------------------------

void leDadosSerial() {

 // Le dados da porta serial 1

while (Serial1.available()) {

char caract = (char)Serial1.read();
  • The Serial class parseint() method can help you (https://www.arduino.cc/en/Reference/ParseInt)

  • I updated my question, take a look please!!

  • But you changed completely... it was a doubt of Arduino and now it became a doubt of Android. I can help little, in this case.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.