我正在将数据从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
感谢您的帮助!
答案 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设备,否则我不明白为什么需要这样的分隔符。