从Arduino收到的消息显示为盒装问号。

时间:2017-08-14 02:15:22

标签: android bluetooth arduino

我正在开展一个涉及Android Uno和Android手机之间通信的项目。手机发出请求信号" *"一旦收到,Arduino就会在循环中发送随机整数。现在,Android设备正在接收消息,但它显示为带框的问号,并且没有收到所有消息。有任何想法吗?非常感谢你!

Arduino代码:

#include <SoftwareSerial.h>

const int RX_PIN = 0;
const int TX_PIN = 1;
SoftwareSerial bluetooth(RX_PIN, TX_PIN); 

char commandChar;
void setup (){
    bluetooth.begin (9600);
    Serial.begin(38400);

}
void loop () {
    if(bluetooth.available()){
        commandChar = bluetooth.read();
        switch(commandChar){
            case '*':
            Serial.println("Got the request code");
            for(int i = 0; i < 10; i++){
                bluetooth.print(random(21));
            }
        break;
      }
   }
}

Android代码:

public void run() {
    initializeConnection();
    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);
            Log.e("Received Message: ", readMessage);
        } catch (IOException e) {
            break;
        }
    }
}

public void initializeConnection() {
    try {
        PrintWriter out;
        out = new PrintWriter(mmOutStream, true);
        out.println("*");
        out.flush();
    }catch (NullPointerException NPE) {

    }
}

控制台输出:

08-13 19:02:46.546 4019-4128/? E/Received Message:: �
08-13 19:02:46.596 4019-4128/? E/Received Message:: ����

1 个答案:

答案 0 :(得分:0)

啊我觉得我发现了问题。随机数正从arduino发送到应用程序,应用程序将这些字节记录为ascii文字。不要发送随机数,而是尝试发送格式正确的ascii(可视字符)。

您可以为“hello”发送十六进制字节[0x68,0x65,0x6c,0x6c,0x6f],或使用SoftwareSerialPrint的内置HEX选项。

所以改成它,看看是否有效。

Register(Type, IEnumerable<Type>)

编辑:

让我们在应用程序端尝试这个。这会将接收到的字节转换为十六进制字符串表示形式,因此我们可以在ascii中正确地看到它。

bluetooth.print(random(21), HEX);