通过蓝牙从Arduino到Android获取奇怪的数据

时间:2018-01-05 17:00:16

标签: java android bluetooth arduino inputstream

我希望从附带蓝牙模块的arduino接收简单数据。我收到的数据,一切正常,但我读不清楚。这是arduino代码:

char incomingByte;

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

}

void loop() {
  Serial.println(2);
  delay(1000);

}

以下是用于从InputStream(BufferedInputStream)读取数据的Android代码:

mInStream = socket.getInputStream()

public void run() {
    BufferedReader r = new BufferedReader(new InputStreamReader(mmInStream));

    while (true) {
        try {
            int a = r.read();
            Log.d(TAG, Integer.toString(a));

        } catch (IOException e) {
            break;
        }
    }
}

这是问题:当Arduino发送数字1时,Android应该通过缓冲输入读取器接收它作为1的十进制值,它等于49.但是我在Log中得到2个额外的行,总是相同的值:10和13。如何避免阅读/接收这个?这是从Arduino发送的1号Logcat输出:

TAG: 49
TAG: 13
TAG: 10

什么错了?为什么Android应用会收到最后两行?

2 个答案:

答案 0 :(得分:1)

这是println()根据Arduino's Documentation所做的事情:

  

按照人类可读的ASCII文本将数据打印到串行端口   通过回车符(ASCII 13或'\ r')和换行符   字符(ASCII 10或'\ n')。

改为使用Serial.print()

答案 1 :(得分:0)

我将重点关注上述计划的两个方面。

  1. 在上面的程序中,打印的两个额外标签是ASCII值 - {<1>}用于“换行”而10用于“回车13在正在打印的内容的末尾添加“回车”和“换行符”。 Serial.println不会添加任何内容 因此,您可以使用Serial.print

  2. 此外,对于从Serial.print阅读的部分内容,您还可以选择以下代码:link

    InputStream