HC-05 + Android(错误的回声/数据)

时间:2013-12-29 20:13:24

标签: android bluetooth arduino

所以我现在面临着一个问题。任何建议都会很好。 首先我使用我的代码从arduino接收数据,然后我使用bluetoothChat并更改了uuid,我可以配对,一切都很好,但是如果我从arduino发送整个字符串到android我只得到那个字符串的一部分。 如果我使用谷歌播放的蓝牙终端,一切都还可以,并且在描述中它说它是由蓝牙聊天样本制作的。

Code Arduino

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 9); //RX,TX

 long int i = 0;

void setup(){
  mySerial.begin(9600);

}

void loop(){
  mySerial.print("This is a message n. ");
  mySerial.println(i);
  i++;
  delay(100);
}

Android代码:蓝牙聊天示例

Android上收到的消息的例子:

要发送的消息!

因此,我认为在模块配对时我会等待第一条消息。 因为每次我都会。

is is a message n. 466
This is a message n.467
.
. ( here I get correct messages )
.
This is a message n.470
message n. 495
.
.
and after the first messages I get messages like
ssage n.534
t
essage n.m
essage n.
535

( I neved again get an entire message )

处理程序:

h = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case RECIEVE_MESSAGE:                                                   // if receive massage
            byte[] readBuf = (byte[]) msg.obj;
            String strIncom = new String(readBuf, 0, msg.arg1);                 // create string from bytes array              
            sb.append(strIncom);                                                // append string
            int endOfLineIndex = sb.indexOf("\r\n");                            // determine the end-of-line
            if (endOfLineIndex > 0) {                                            // if end-of-line,
                String sbprint = sb.substring(0, endOfLineIndex);               // extract string
                sb.delete(0, sb.length());                                      // and clear

                Log.d("Arduino", "Mesaj:"+ sbprint.toString());



            }
            Log.d("Arduino", "...Mesaj:"+ sb.toString() +  " Byte:" + msg.arg1 + "...");
            break;
        }
    };
};

InputStream监听器

  public void run() {
        byte[] buffer = new byte[256];  // 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"
                h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     // Send to message queue Handler


            } catch (IOException e) {
                break;
            }
        }

    }

1 个答案:

答案 0 :(得分:1)

请注意,您正在使用串行端口的软件仿真,因此时序不如硬件UART那么好。

可能是以下两个可能问题中的一个或两个:

1)启动和停止位未正确定时,导致背靠背字节。设置字符串时会发生这种情况,而不是一次啄一个字符串。 解决方案是将每个密钥分开。

2)波特率与容差不匹配。在HC05和Arduino上缓慢降低或加快波特率将更好地匹配时间。

我还建议您确保您的库是SoftwareSerial,声明它是 NewSoftSerial 。它修复了许多问题。它是在Arduino IDE 1.0。+核心库中实现的,所以如果你有最新的IDE,你应该拥有它。