0
私はarduinoからシリアルを読みたいです。私はこのコードを使用します。C言語を使用してLinuxでarduinoシリアルを読む
#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のは非常にシンプルなスケッチ実行します:私の質問は外の順序を作る方法である
??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 ??
:このcombinatinの
int x;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("DO YOU HEAR ME ??");
delay(1000);
}
、出力はということです混沌。私は、この問題は、バッファが終了し、新しいものが始まる(より大きなバッファよりも少ない迷惑データ)が発生するが、無限のバッファを持つことができないことがわかった。また、最初に読んだときに多くのジャンクがあります。それを同期する方法はありますか?
は(また、私は間違いのためではないネイティブの英語申し訳ありません。)
read' 'の戻り値をチェックしてみてください。ここにhttp://tldp.org/HOWTO/Serial-Programming-HOWTO/(サンプルコードを形成する。)
そして、新たな貧困層Arduinoのコードは次のとおりです。「HOW TOシリアルプログラミング」から盗作。 –
@DavidCullen私はcannonical入力を有効にしています。今では迷惑メールは行の先頭でしか発生しません。だから私は今、入力に余分なビットがあると仮定しています..しかし、私はどこから(3文字、3バイト)。 – Kozlowsqi
片面メモ、ボーレートを上げようとしてみて問題を解決しますか? – LethalProgrammer