连接成功建立,并能够发送数据。
当过我们改变它的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
?
我需要检索的整数,而不是个位数。
在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的解释是正确的,使用接收到的字符作为一个短期,而不是作为一个字符。
希望这可以帮助
对于发送侧,getBytes()构造不以空终止返回C字符串。 在Java中,数组包含有关其长度的信息。 因此,字节[]包含它的长度; 它不像一个C的char [],其使用一个空以指示该阵列的端部。 如果你想翻译的出站数据,你需要自己添加终止符:
String outputData = String.valueOf(progress);
streams.write(outputData.getBytes());
streams.write('\0');
需要注意的是getBytes()构造可以完全分解,如果字符集在Android端默认编码变化。 在不同的Android设备,getBytes()构造可以返回Unicode字符集编码,这Arduino的将无法进行解码。
你有一个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();
干杯,