我正在尝试在 Linux Mint 15 上使用 Arduino 和 C 实现一个简单的 SLAM 项目。Arduino 项目正在通过蓝牙(串行)将数据发送到笔记本电脑。数据由 C 程序读取。在 Arduino 串口中,数据显示正确,但在 notebook 中,接收到的数据是错误的。(在图像中,白色是 Arduino 数据。终端显示“收到”数据。)
我正在发送d080x096y099z035
(例如)和接收99z0356y0999z035
(乱序?)。
所以,我有一些问题:
我该怎么做才能
read()
在 C 中创建命令,以正确的顺序和长度读取数据?(顺序:d000x000y000z000
,长度 = 16)在 Arduino 发送功能中,使用
Serial.print(char buffer[])
和是否存在长度差异Serial.println(char buffer[])
?(比如'\n'
在缓冲区末尾添加 a 或其他内容?)我应该
delay()
在 Arduino 代码还是 C 代码中使用该函数?
在阿杜诺:
...
int buffer_size = 17;
char buffer[17];
//void setup()
void loop(){
//create the string resp = "d000x111y222z333"
...
resp.toCharArray(buffer, buffersize);
bluetooth.print(buffer);
delay(200);
}
在 C 程序中:
...
int fd = open("/dev/rfcomm4", O_RDONLY | O_NOCTTY | O_NDELAY);
printf("fd code %d\n", fd);
if (fd == -1)
{
gchar *msg = "open_port: Unable to open /dev/rfcomm4";
gtk_label_set_text(GTK_LABEL(label), msg);
perror("error: ");
}
char buffer[17];
int n;
printf("entering in loop...\n");
while (1)
{
n = read(fd, buffer, sizeof(buffer));
printf("%s\n", buffer);
}