gpt4 book ai didi

c - 从Arduino串口读取整数

转载 作者:行者123 更新时间:2023-11-30 15:00:39 24 4
gpt4 key购买 nike

我已经编写了一个 C 程序,将整数数组写入 Arduino:

// ...
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。
当您执行此操作三次时,您已经读取了所有三个整数。

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 .

关于c - 从Arduino串口读取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com