链接已成功建立并能够发送数据。
Android会在我们更改时发送SeekBar数据。
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
的{{1}}。
问题在于数据的格式。如果我发送' 25' arduino正在接收' 2' 5'当我做Socket
时。
将Serial.read()
转换为字节时,数据的格式是什么?一切都是outputData
终止的吗?
我需要检索整数而不是单个数字。
答案 0 :(得分:1)
arduinoboard似乎逐字节地读取RX-Stream。如果发送“25”,则发送字符'2'的ascii字节(0x32 /十进制50),然后发送字符'5'的ascii表示(即0x35 /十进制53)。 arduino将这些数字解释为字符。因此,如果您要传输的号码低于256,您可以: 在Android上:
if(seekBar.getId() == R.id.seekBar)
{
speed.setText(String.valueOf(progress));
if(progress<256)
streams.write((byte)progress);
}
为了确保Arduino正确解释它,请将收到的字符用作短字而不是字符。
希望这有帮助
答案 1 :(得分:1)
对于发送方,getBytes()不返回带有空终止符的C字符串。在Java中,数组包含有关其长度的信息。所以byte []包含它的长度;它不像C char [],它使用null来表示数组的结尾。如果要翻译出站数据,您需要自己添加终结符:
String outputData = String.valueOf(progress);
streams.write(outputData.getBytes());
streams.write('\0');
请注意,如果字符集默认编码在Android端发生更改,则getBytes()可以完全分解。在不同的Android设备上,getBytes()可以返回unicode字符集编码,Arduino无法解码。
答案 2 :(得分:0)
你有一个int,将它转换为字符串并发送字符串:
String outputData = String.valueOf(progress);
streams.write(outputData.getBytes());
streams.write( progress );
在Arduino端Serial.read()
一次读取一个字节,所以(假设线上有大的字节)你可以做
int incomingByte = Serial.read();
incomingByte <<= 8;
incomingByte |= Serial.read();
干杯,