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

Getting weird data from Arduino to Android via Bluetooth

我想从带有蓝牙模块的arduino接收简单数据。我正在接收数据,一切正常,但我不能很好地阅读它。这是arduino代码:

char incomingByte;

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

}

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

}

这里是Android从InputStream(BufferedInputStream)读取数据的代码:

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 应该通过缓冲输入 Reader 接收它作为 1 的十进制值,它等于 49。但是我得到 2 额外的行日志,总是相同的值:10 和 13。如何避免 reading/receiving 这种情况?这是从 Arduino 发送的数字 1 的 Logcat 输出:

TAG: 49
TAG: 13
TAG: 10

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

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

Prints data to the serial port as human-readable ASCII text followed by a carriage return character (ASCII 13, or '\r') and a newline character (ASCII 10, or '\n').

改用Serial.print()

我将重点介绍上述计划的两个方面。

  1. 在上面的程序中,打印的两个额外标签是 ASCII 值 - 10 for "line feed" 和 13 用于“马车 return”。
    Serial.println 将“carriage return”和“line feed character”添加到打印内容的末尾. Serial.print 不添加任何内容。
    所以你可以使用 Serial.print.

  2. 另外,对于InputStream的阅读部分,你也可以更喜欢下面的代码:link

    BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder total = new StringBuilder();
    String line;
    while ((line = r.readLine()) != null) {
        total.append(line).append('\n');
    }