请教关于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个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!