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