代码之家  ›  专栏  ›  技术社区  ›  masan

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

  •  0
  • masan  · 技术社区  · 8 年前

    我想从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。但我在日志中得到了另外两行,总是相同的值:10和13。如何避免阅读/接收此信息?以下是从Arduino发送的1号的Logcat输出:

    TAG: 49
    TAG: 13
    TAG: 10
    

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

    2 回复  |  直到 8 年前
        1
  •  1
  •   Omar Aflak    8 年前

    这是什么 println() 是否根据 Arduino's Documentation :

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

    使用 Serial.print() 相反

        2
  •  0
  •   gre_gor    8 年前

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

    1. 在上述程序中,打印的两个额外标记是ASCII值- 10 用于“ 线路馈线 “以及 13 用于“ 回车符 ".
      这个 Serial.println 添加一个“ 回车符 “和” 换行符 “直到正在打印的内容结束。 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');
      }