/ /シリアルポートデータの読み取り - c、file-io、シリアルポート、arduino、arduino-ide

シリアルポートデータの読み取り - c、file-io、シリアルポート、arduino、arduino-ide

私はMac OS上のCでシリアルポートのデータを読み込もうとしています。シリアルポートの設定は別のArduino IDEで行います。

私は部分的なデータを読むことができますが、印刷されたデータはそれ自身を繰り返し、以下のようにゼロを読み始める。 O_NONBLOCKを削除すると、プログラムがハングするだけです。この問題を解決するにはどうすればよいですか?第二に、私がforループでデータを読み込んでいることを考えると、読み込み速度がボーレートに対応していることをどのように確認するのですか?

データを見る: 296 310 0

320 295 311

320 295 311

9 296 311

320 295 311

320 295 311

9 296 311

...

0 0 0

0 0 0

0 0 0 等

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>

int buffer[300];

int main(int argc, const char* argv[])
{

// open serial port
int port;
port = open("/dev/tty.usbmodem1411", O_RDONLY | O_NONBLOCK);
if (port == -1)
{
printf("Unable to open serial port.n");
return 1;
}

// instantiate file
FILE* file = fdopen(port, "r");
if (file == NULL)
{
printf("Unable to instantiate file.n");
close(port);
return 2;
}

for (int j = 0; j < 200; j++)
{

fscanf(file, "%d %d %d", &buffer[3*i], &buffer[3*i+1], &buffer[3*i+2]);
printf("%d %d %dn", buffer[3*i], buffer[3*i+1], buffer[3*i+2]);

i = (i + 1) % 100;

usleep(10000);

}

fclose(file);
close(port);

return 0;

}

回答:

回答№1は0

クリス・ストラットンの場合:

if (fgets(temp, sizeof(temp), file) != NULL)
{
sscanf(temp, "%d %d %dn", &buffer[3*i], &buffer[3*i+1], &buffer[3*i+2]);
printf("%d %d %dn", buffer[3*i], buffer[3*i+1], buffer[3*i+2]);
}

しかし、私の元の質問に戻ると、私がfscanfとprintfを使用していると、データを取得した後、無期限にゼロしか読み込めません。シリアルポート通信の問題が多いと思いますか?