繁体   English   中英

从串口Arduino读取整数

[英]Reading ints from serial port Arduino

我已经完成了一个将整数数组写入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 ???

}

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

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]如果您的计算机出现打and,并且没有一次发送所有数据,那么您的Arduino代码将只等待数据,而不会做其他任何事情。 在这里阅读更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM