Arduino上的串行消息转换为整数

时间:2013-04-20 23:15:20

标签: serial-port integer arduino

我希望我的Arduino通过串行通信接收整数。你能帮我解决这个问题吗?

应采用以下形式:

int value = strtoint(Serial.read());

2 个答案:

答案 0 :(得分:5)

有几种方法可以从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 :(得分:5)

您可以使用Serial.parseInt()函数,请参阅此处:http://arduino.cc/en/Reference/ParseInt