0
我想从arduino读取串口。我用这个代码:在linux下读取arduino串行使用C
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
#include <sys/ioctl.h>
int main(){
char data[1024];
char dev[] = "/dev/ttyACM1";
int fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, FNDELAY);
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag |= CS8;
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
tcsetattr(fd, TCSANOW, &options);
ioctl(fd, TCFLSH, 2);
while(1){
read(fd, data, sizeof(data));
printf(data);
}
//write(fd, data, sizeof(data));
}
我的Arduino的运行速度非常的简单草图:
int x;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("DO YOU HEAR ME ??");
delay(1000);
}
这combinatin的输出是:
??OU HEAR ME ??
DO YOU HEAR ME ??
DO YOU HEAR ME ??
A¹þ
??OU HEAR ME ??
DO YOU HEAR ME ??
DO YOU HEAR ME ??
A¹þ
??OU HEAR ME ??
DO YOU HEAR ME ??
DO YOU HEAR ME ??
我的问题是如何使顺序出混沌。我发现这个问题发生在缓冲区结束并且新的开始时(更大的缓冲区更少的垃圾数据),但是我不能有无限的缓冲区。第一次读取时也有很多垃圾..有没有办法同步它或什么?
(还有我不是以英语为母语对不起任何错误。)
尝试检查read'的'的返回值。 –
@DavidCullen我启用了cannonical输入,现在垃圾只发生在行的开头..所以我现在假设它有一些额外的位输入..但我不知道从哪里(这是3字符,3个字节)。 – Kozlowsqi
一面注意,试图增加波特率,看它是否解决了这个问题? – LethalProgrammer