我希望我的 Arduino 通过串行通信接收一个整数。你能帮我解决这个问题吗?
它应该是这样的形式:
int value = strtoint(Serial.read());
我希望我的 Arduino 通过串行通信接收一个整数。你能帮我解决这个问题吗?
它应该是这样的形式:
int value = strtoint(Serial.read());
您可以使用 Serial.parseInt() 函数,请参见此处:http ://arduino.cc/en/Reference/ParseInt
有几种方法可以从 中读取整数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);
}