串行消息上的Arduino
问题描述:
答
有几种方法可以从Serial
读一个整数,在很大程度上取决于如何发送时的数据进行编码。 Serial.read()
只能用于读取单个字节,从而需要被发送的数据能够从这些字节重建。
下面的代码可能会为你工作。它假定串行连接已被配置为9600波特,该数据被发送作为ASCII文本,并且每个整数分隔换行符(\n
):
// 12 is the maximum length of a decimal representation of a 32-bit integer,
// including space for a leading minus sign and terminating null byte
byte intBuffer[12];
String intData = "";
int delimiter = (int) '\n';
void setup() {
Serial.begin(9600);
}
void loop() {
while (Serial.available()) {
int ch = Serial.read();
if (ch == -1) {
// Handle error
}
else if (ch == delimiter) {
break;
}
else {
intData += (char) ch;
}
}
// Copy read data into a char array for use by atoi
// Include room for the null terminator
int intLength = intData.length() + 1;
intData.toCharArray(intBuffer, intLength);
// Reinitialize intData for use next time around the loop
intData = "";
// Convert ASCII-encoded integer to an int
int i = atoi(intBuffer);
}
+1
我不得不改变字节intBuffer [12]; char charBuffer [12];它编译 – fersarr 2014-04-27 19:44:40
答
您可以使用Serial.parseInt()功能,在这里看到:http://arduino.cc/en/Reference/ParseInt
+0
不知道什么上述方法的好处是,但这完全为我工作。 – 2016-01-26 19:22:20
是整型字符固定数量还是会由一个非数字被终止? – walrii 2013-04-21 07:29:00
嗯...'Serial.read()'已经返回'int' ... – angelatlarge 2013-04-21 07:54:35
@angelatlarge'Serial.read()'不会返回'int'但只有这样调用代码可以成功读取区分和一个错误。在检查它没有返回“-1”(表示错误)后,正确的用法将返回值视为一个“byte”。 – 2013-04-22 11:29:46