Java Android发送蓝牙消息接收空格字符

Java Android发送蓝牙消息接收空格字符,java,android,bluetooth,arduino,android-bluetooth,Java,Android,Bluetooth,Arduino,Android Bluetooth,我正在与安卓4.4.4的2013 Nexus 7和带有HC-06蓝牙单元的Arduino Mega 2560进行通信。我已经建立了从Nexus 7到HC-06的连接,并从Arduino向Nexus发送了gotton数据,但我无法将数据从Nexus 7传输到Arduino。在Android中传输数据时,我没有收到任何错误,但Arduino接收到的是空格,而不是我发送的字符 Android写入方法: public void write(String message) { Log.d(

我正在与安卓4.4.4的2013 Nexus 7和带有HC-06蓝牙单元的Arduino Mega 2560进行通信。我已经建立了从Nexus 7到HC-06的连接,并从Arduino向Nexus发送了gotton数据,但我无法将数据从Nexus 7传输到Arduino。在Android中传输数据时,我没有收到任何错误,但Arduino接收到的是空格,而不是我发送的字符

Android写入方法:

public void write(String message) {
        Log.d(TAG, "...Data to send: " + message + "...");
        byte[] msgBuffer = message.getBytes();
        try {
            mmOutStream.write(msgBuffer);
        } catch (IOException e) {
            Log.e(TAG, "...Error data send: " + e.getMessage() + "...");
        }
    }
发送数据:

public static void sendInfo(String info) {
    boolean isErr = false;
    if (MainActivity.isConnected) {
        Log.d(TAG, "In sentInfo()");
        //Log.d(TAG, "...Data to send: " + info + "...");
        //TO(done)DO: send info to bluetooth device (Arduino)


        try {
            mConnectedThread.write(info);
        } catch (NullPointerException n) {
            isErr = true;
            Log.e("Error", "Failed to send message \"" + Arrays.toString(msg) + "\" with error \"" + n.getMessage() + ".\"");
        }

        if (!isErr) {
            Log.i("sentInfo", "In sentInfo(), this was sent: " + Arrays.toString(msg));
            //noinspection ALL
            isErr = false;
        }
    } else {
        Toast.makeText(MainActivity.mThis, "Please connect the Arduino", Toast.LENGTH_SHORT).show();
    }
}
Arduino接收代码:

int setMsg() {
   if (Serial1.available() > 0) {
      chars = Serial1.available();
      incomingByte = Serial1.read();
      putstring("You've Got Mail!  Characters: ");
      Serial.print(chars);
      putstring("  Message: '");
      Serial.print(incomingByte);
      putstring_nl("'.");
      if        (incomingByte == 49) {
         return 1;
         flashLED(500);
         Serial.println(msg);
      } else if (incomingByte == 50) {
         return 2;
         flashLED(500);
         Serial.println(msg);
     } else if (incomingByte == 51) {
         return 3;
         flashLED(500);
         Serial.println(msg);
      } else if (incomingByte == 52) {
         return 4;
         flashLED(500);
         Serial.println(msg);
      } else if (incomingByte == 53) {
         return 5;
         flashLED(500);
         Serial.println(msg);
      } else if (incomingByte == 100) {
         return 6;
         flashLED(500);
         Serial.println(msg);
      } else {
         Serial.println(incomingByte);
         digitalWrite(ledPin, HIGH);
         delay(3250);
         digitalWrite(ledPin, LOW);
         delay(20);
         return 0;
      }
   }
}
请解释为什么Arduino的
串行
总是打印
你收到邮件了!字符:1条消息:'.
当Nexus 7向HC-06发送任何消息时(我只向
sendInfo()
函数发送引号中的数字)。

  • 什么类型的incomingByte是int
根据您的评论进行编辑:

将读取代码更改为:

(我只向sendInfo()函数发送引号中的数字)到HC-06

你不应该发送引号中的数字,而应该发送一个数字。这可能是你的问题,因为它正在读引号

  • 此外,最好使用一个开关,而不是所有这些ifs

  • 还有这个
    byte[]msg=info.getBytes()sendInfo(String info){
    中,code>是一个不必要的行,您没有使用它。从我看到的情况来看,您在
    write(String)方法中将字符串解析为字节数组

而不是
Log.i(“sentInfo”,“在sentInfo()中”,而是发送:“+Arrays.toString(msg));
您可以使用
Log.i(“sentInfo”,“在sentInfo()中,这是发送的:“+info”);

而你在每次if中返回后所有的东西都不会被执行

return 1;
flashLED(500); 
Serial.println(msg);

在每个if语句中要执行的任何内容都需要放在return语句之前,返回将导致函数完成并返回到调用函数。

我在草图顶部将
incomingByte
定义为
char
。我相应地更改了它,但现在它总是得到
you's have Mail!Characters:1条消息:“0”。
无论消息发送什么!我相信
mmOutputStream
正在使用
byte[]msgBuffer=Message.getBytes()以ASCII格式发送我想要发送的数字
。我没有发送任何引号。我从用户可以按下的几个按钮中获取数字,这些按钮应该发送数字字符串,如下所示:
ArduinoTools.sendInfo(“5”);
(如上所述,
sendInfo()
函数保存在另一个
.java
文件中)我以前已经让它工作过,但我不知道现在出了什么问题,也不知道如何解决这个问题。不再支持
BYTE
关键字。真遗憾。
return 1;
flashLED(500); 
Serial.println(msg);