通过蓝牙从 Arduino 获取奇怪的数据到 Android
Getting weird data from Arduino to Android via Bluetooth
我想从带有蓝牙模块的arduino接收简单数据。我正在接收数据,一切正常,但我不能很好地阅读它。这是arduino代码:
char incomingByte;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(2);
delay(1000);
}
这里是Android从InputStream(BufferedInputStream)读取数据的代码:
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 应该通过缓冲输入 Reader 接收它作为 1 的十进制值,它等于 49。但是我得到 2 额外的行日志,总是相同的值:10 和 13。如何避免 reading/receiving 这种情况?这是从 Arduino 发送的数字 1 的 Logcat 输出:
TAG: 49
TAG: 13
TAG: 10
怎么了?为什么 Android 应用会收到最后两行?
这是 println()
根据 Arduino's Documentation 所做的:
Prints data to the serial port as human-readable ASCII text followed
by a carriage return character (ASCII 13, or '\r') and a newline
character (ASCII 10, or '\n').
改用Serial.print()
。
我将重点介绍上述计划的两个方面。
在上面的程序中,打印的两个额外标签是 ASCII 值 - 10
for "line feed" 和 13
用于“马车 return”。
Serial.println
将“carriage return”和“line feed character”添加到打印内容的末尾. Serial.print
不添加任何内容。
所以你可以使用 Serial.print
.
另外,对于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');
}
我想从带有蓝牙模块的arduino接收简单数据。我正在接收数据,一切正常,但我不能很好地阅读它。这是arduino代码:
char incomingByte;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(2);
delay(1000);
}
这里是Android从InputStream(BufferedInputStream)读取数据的代码:
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 应该通过缓冲输入 Reader 接收它作为 1 的十进制值,它等于 49。但是我得到 2 额外的行日志,总是相同的值:10 和 13。如何避免 reading/receiving 这种情况?这是从 Arduino 发送的数字 1 的 Logcat 输出:
TAG: 49
TAG: 13
TAG: 10
怎么了?为什么 Android 应用会收到最后两行?
这是 println()
根据 Arduino's Documentation 所做的:
Prints data to the serial port as human-readable ASCII text followed by a carriage return character (ASCII 13, or '\r') and a newline character (ASCII 10, or '\n').
改用Serial.print()
。
我将重点介绍上述计划的两个方面。
在上面的程序中,打印的两个额外标签是 ASCII 值 -
10
for "line feed" 和13
用于“马车 return”。
Serial.println
将“carriage return”和“line feed character”添加到打印内容的末尾.Serial.print
不添加任何内容。
所以你可以使用Serial.print
.另外,对于
InputStream
的阅读部分,你也可以更喜欢下面的代码:linkBufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder total = new StringBuilder(); String line; while ((line = r.readLine()) != null) { total.append(line).append('\n'); }