C读取并解析串口

时间:2013-03-09 20:12:38

标签: c serial-port arduino

我正在将数据从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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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设备,否则我不明白为什么需要这样的分隔符。