0

Arduinoからシリアルポートにデータを送信しています:

byte xBeeFrame[23];
unsigned int windData, 
signed int tempData;
xBeeFrame[0] = 0x7E;
xBeeFrame[18] = (windData >> 8) & 0xFF;
xBeeFrame[19] = windData & 0xFF;
xBeeFrame[20] = (tempData >> 8) & 0xFF;
xBeeFrame[21] = tempData & 0xFF;

問題は、C プログラムでこのデータを解析することです。どのように私はそれを行うのですか?シリアルポートの読み取り方法は次のとおりです。

unsigned char bytes[254];
                if (read(tty_fd,bytes,sizeof(bytes))>0){
                    ///write(STDOUT_FILENO,bytes,sizeof(bytes));              // if new data is available on the serial port, print it out

手伝ってくれてありがとう!

4

1 に答える 1

2

さて、最初に行うことは、ArduinoとPC間の通信に使用する構造を宣言するための別のヘッダーファイルを作成することです。したがって、次のようなファイルではcomms.h

#ifndef COMMS_H
#define COMMS_H
typedef struct commFrame_t commFrame_t {
    unsigned int wind, 
    signed int temperature;     
}
#endif COMMS_H

次に、Arduinoコードで#include "comms.h"、次のようにデータを送信する必要があります。

commFrame_t frame;
// Fill the frame with data
frame.wind = someWindValue;
frame.temperature = someTemperatureValue;
// Send the frame
Serial.write(&frame, sizeof(frame));

PC側でも#include "comms.h"、同じフレームを読みます。

commFrame_t frame;

if (read(tty_fd,&frame,sizeof(frame))){
    // Process a frame
}

文字が失われるとプロトコル全体が暴走するため、これは絶対確実ではありませんが、最初のプロトタイプとしては問題ない可能性があります。構造体をXBeeデバイスに直接渡さない限り、たとえば区切り文字が必要な理由はわかりません。

于 2013-03-10T20:31:46.143 に答える