我希望从附带蓝牙模块的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.但是我在Log中得到2个额外的行,总是相同的值:10和13。如何避免阅读/接收这个?这是从Arduino发送的1号Logcat输出:
TAG: 49
TAG: 13
TAG: 10
什么错了?为什么Android应用会收到最后两行?
答案 0 :(得分:1)
这是println()
根据Arduino's Documentation所做的事情:
按照人类可读的ASCII文本将数据打印到串行端口 通过回车符(ASCII 13或'\ r')和换行符 字符(ASCII 10或'\ n')。
改为使用Serial.print()
。
答案 1 :(得分:0)
我将重点关注上述计划的两个方面。
在上面的程序中,打印的两个额外标签是ASCII值 - {<1>}用于“换行”而10
用于“回车“
13
在正在打印的内容的末尾添加“回车”和“换行符”。 Serial.println
不会添加任何内容
因此,您可以使用Serial.print
。
此外,对于从Serial.print
阅读的部分内容,您还可以选择以下代码:link
InputStream