安卓/ Arduino的蓝牙通信(Android/Arduino bluetooth communi

2019-10-17 17:23发布

连接成功建立,并能够发送数据。

当过我们改变它的Android正在发送搜索栏的数据。

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if(seekBar.getId() == R.id.seekBar)
    {
        speed.setText(String.valueOf(progress));
        String outputData = String.valueOf(progress);
        streams.write(outputData.getBytes());
    }
}

streams.write()将数据写入所述OutputStream所述的Socket

问题是与数据。如果我的发送格式“25” Arduino是接收“2”,“5”,当我做Serial.read()

什么是数据的格式,当outputData转换为字节? 就是一切被终止\0

我需要检索的整数,而不是个位数。

Answer 1:

在arduinoboard似乎读取字节的RX-流字节。 如果发送“25”它发送用于character'2' (其是0x32 /十进制50),然后用于字符的ASCII表示‘ASCII码字节5’(其是0x35 /十进制53)。 Arduino的解释这些数字的字符。 所以,如果你想发送的数量比256下,你可以这样做:在Android上:

if(seekBar.getId() == R.id.seekBar)
    {
        speed.setText(String.valueOf(progress));
        if(progress<256)
            streams.write((byte)progress);
    }

为了确保Arduino的解释是正确的,使用接收到的字符作为一个短期,而不是作为一个字符。

希望这可以帮助



Answer 2:

对于发送侧,getBytes()构造不以空终止返回C字符串。 在Java中,数组包含有关其长度的信息。 因此,字节[]包含它的长度; 它不像一个C的char [],其使用一个空以指示该阵列的端部。 如果你想翻译的出站数据,你需要自己添加终止符:

String outputData = String.valueOf(progress);
streams.write(outputData.getBytes());
streams.write('\0');

需要注意的是getBytes()构造可以完全分解,如果字符集在Android端默认编码变化。 在不同的Android设备,getBytes()构造可以返回Unicode字符集编码,这Arduino的将无法进行解码。



Answer 3:

你有一个int,将其转换为字符串和发送字符串:

 String outputData = String.valueOf(progress);
 streams.write(outputData.getBytes());

如何只发送INT :

streams.write( progress );

在Arduino的侧Serial.read()一次读取一个字节,所以(假设上线大字节序),你可以这样做

int incomingByte = Serial.read();
incomingByte <<= 8;
incomingByte |= Serial.read();

干杯,



文章来源: Android/Arduino bluetooth communication