【问题标题】:Reading ints from serial port Arduino从串口Arduino读取整数
【发布时间】:2017-02-01 21:24:28
【问题描述】:

我已经完成了一个将整数数组写入 Arduino 的 C 程序:

// ...
FILE* file;
file = fopen("/dev/ttyuSB0","w");
for (int i = 0; i < 3; i++) {
    fprintf(file, "%d ", rgb[i]);
}
fclose(file);
// ...

如何从我的 arduino 代码 (.ino) 中捕获文件中的三个整数?

while (Serial.available() > 0) {

    // What can I do here ???

}

【问题讨论】:

  • fprintf(file, "%d ", rgb[i]); 写入 text。尝试仅捕获文本,然后转换为int。建议使用非空格分隔符来了解数字的文本表示何时结束。

标签: c arrays arduino serial-port


【解决方案1】:

您需要读取数据并将其放入缓冲区。在遇到 ' ' 字符后,您将终止缓冲区内的字符串并将其转换为 int。
当您执行此操作 3 次时,您已读取所有三个整数。

const uint8_t buff_len = 7; // buffer size
char buff[buff_len]; // buffer
uint8_t buff_i = 0; // buffer index

int arr[3] = {0,0,0}; // number array
uint8_t arr_i = 0; // number array index

void loop() {
    while (Serial.available() > 0) {
        char c = Serial.read();
        if (buff_i < buff_len-1) { // check if buffer is full
            if (c == ' ') { // check if got number terminator
                buff[buff_i++] = 0; // terminate the string
                buff_i = 0; // reset the buffer index
                arr[arr_i++] = atoi(buff); // convert the string to int
                if (arr_i == 3) { // if got all three numbers
                    arr_i = 0; // reset the number array index

                    // do something with the three integers
                }
            }
            else if (c == '-' || ('0' <= c && c <= '9')) // if negative sign or valid digit
                buff[buff_i++] = c; // put the char into the buffer
        }
    }
    // maybe do some other stuff
}

或者如果你不介意阻塞代码[1]你可以使用内置的ParseInt

void loop() {
    while (Serial.available() > 0) {
        arr[0] = Serial.parseInt();
        arr[1] = Serial.parseInt();
        arr[2] = Serial.parseInt();
        Serial.read(); // read off the last space

        // do something with the three integers
    }
    // maybe do some other stuff, but might be blocked by serial read
}

[1] 如果您的计算机出现故障并且没有立即发送所有数据,您的 Arduino 代码将只是等待数据,不会执行任何其他操作。阅读更多here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 2014-05-11
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多