yuancr 发表于 2016-7-20 23:16:04

请教关于HC05蓝牙速传模块中间无法传输数据的问题

最近在着手攻坚无人机的基于Arduino蓝牙模块与手机间的通信的技术点。本来一切都已经非常顺利了,可以实现了我需要的数据在手机和蓝牙模块间的传输,然后利用Arduino模块作为MCU进行数据的处理。但是最近新出现了一个问题,说明如下,急求各路大神帮忙:

在手机蓝牙与基于Arduino扩展出来的蓝牙模块进行连接(这里应该不算是配对)后,开始一段时间内,手机与模块间的通信一切正常,可以完全正确且完整地接收到手机传来的数据,但是在过了一段时间后,不知道为何,Arduino模块接收不到手机经蓝牙传来的数据了,检查了配对连接,手机app程序执行情况一切都是正常的,也就是说,从手机通过蓝牙发送数据、信道的存在性等方面,至少表面上看都是正常的,如果需要重新恢复,则需要完全断开连接后重新连接两个模块,才能恢复到最开始的正常情况。

时间非常紧迫,我现在连问题可能出在哪都没思路了,更别提解决问题了,所以急求论坛内各路大神帮忙指一条明路,万分感谢!

下面附上手机app通过蓝牙发出信息的一段代码:

/*这是一个连接按钮,通过点击,可以实现手机蓝牙与在Arduino上扩展的蓝牙模块的连接*/
    private class ConnectButtonListener implements OnClickListener {
      public void onClick(View v) {
            if (adapter != null) {
                //Toast.makeText(myContext, "本机支持蓝牙功能!", Toast.LENGTH_SHORT).show();
                if (!adapter.isEnabled()) {
                  //如果蓝牙设备不可用的话,创建一个intent对象,该对象用于启动一个Activity,提示用户启动蓝牙适配器
                  Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                  startActivity(intent);
                }

                Set<BluetoothDevice> devices = adapter.getBondedDevices();
                if (devices.size() > 0) {
                  for (Iterator iterator = devices.iterator(); iterator.hasNext(); ) {
                        BluetoothDevice device = (BluetoothDevice) iterator.next();
                        Toast.makeText(myContext, device.getAddress(), Toast.LENGTH_SHORT);
                        Log.d("Bondedtag", device.getAddress());
                        Log.d("Bondedtag", device.getName());

                        if (connect_result) {
                            break;
                        }

                        UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
                        try {
                            bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);
                            bluetoothSocket.connect();
                            Log.d("mytag", "Connected!");
                            Toast.makeText(myContext, "已连接", Toast.LENGTH_SHORT).show();
                            connect_result = true;
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                  }
                }
                adapter.startDiscovery();
            } else {
                Toast.makeText(myContext, "本机不支持蓝牙功能!", Toast.LENGTH_SHORT).show();
            }
      }
    }




    /*这是一个Android里的进度条,模拟飞机的油门推杆,当进度条被改变时获取改变后的值,然后通过蓝牙发送给Arduino扩展的蓝牙模块*/
    private OnSeekBarChangeListener verticalSeekBarChangeListener = new OnSeekBarChangeListener() {

      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {

      }

      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {

      }

      @Override
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            verticalText.setText(Integer.toString(progress) + "%");
            Youmen = Integer.toString(progress) + "*";
            //Log.v("stop", "Conn!");
            //发送更新后的数据
            try {
                if (adapter.isEnabled() == false) {
                  Toast.makeText(myContext, "蓝牙未开启!", Toast.LENGTH_SHORT).show();
                  Log.v("stop", "Unopened!");
                } else if (connect_result == false) {
                  Toast.makeText(myContext, "蓝牙未连接,请重试!", Toast.LENGTH_SHORT).show();
                  Log.v("stop", "Unconnected!");
                } else {
                  /*下面就是通过蓝牙模块发送data变量的数据了*/
                  String data = Youmen;//+percent+"*"+angle+"*";
                  byte b[] = data.getBytes();
                  OutputStream outputStream = bluetoothSocket.getOutputStream();
                  outputStream.write(b);
                  Log.v("status","Send!");
                  Log.v("stop", "Connected!");
                }
            } catch (IOException e) {
            }
      }
    };

只需各路大神看看,然后提出自己的想法,觉得可能是哪里有问题或者不稳定即可,不一定要解决方案,急!万分感谢!!!!!
页: [1]
查看完整版本: 请教关于HC05蓝牙速传模块中间无法传输数据的问题