首页 文章

C读取并解析串口

提问于
浏览
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

感谢帮助!

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设备,否则我不明白为什么您需要这样的分隔符 .

相关问题