C++串口数据接收,如何把需要的数据提取出来??
单片机向PC进行串口通信,串口发送的数据格式为:|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;||@pitch,-1.04;|@roll,...
单片机 向 PC进行串口通信,串口发送的数据格式为:
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
然后我用c++来接收:
/** 读取输入缓冲区中的数据并输出显示 */
char cRecved = 0x00;
int temp = 0;
char charArr[1024] = {};
std::wstringbuf *strbuf;
do
{
cRecved = 0x00;
if(pSerialPort->ReadChar(cRecved) == true)
{
charArr[temp] = cRecved;
temp++;
continue;
}
}while(--BytesInQue);
std::string str = charArr;
std::cout<<str;
std::cout<<"--------------------------------------------------------------------------"<<std::endl;
这个时候显示的我就不明白了,查了查说是计算机每次从缓冲区里读取出来的数量是不一定得,我以为是一条一条的,所以出现下面的问题:
数据不是一条一条的,我也就不知道该怎么处理了,求帮助!
最终想要的效果就是把每帧数据中的三个值读取出来,然后进行计算,应该怎么做呢? 展开
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
然后我用c++来接收:
/** 读取输入缓冲区中的数据并输出显示 */
char cRecved = 0x00;
int temp = 0;
char charArr[1024] = {};
std::wstringbuf *strbuf;
do
{
cRecved = 0x00;
if(pSerialPort->ReadChar(cRecved) == true)
{
charArr[temp] = cRecved;
temp++;
continue;
}
}while(--BytesInQue);
std::string str = charArr;
std::cout<<str;
std::cout<<"--------------------------------------------------------------------------"<<std::endl;
这个时候显示的我就不明白了,查了查说是计算机每次从缓冲区里读取出来的数量是不一定得,我以为是一条一条的,所以出现下面的问题:
数据不是一条一条的,我也就不知道该怎么处理了,求帮助!
最终想要的效果就是把每帧数据中的三个值读取出来,然后进行计算,应该怎么做呢? 展开
1个回答
展开全部
串口的本质是一个个字符发的,所以你收到的时候有可能不是一个完整的字节。你可以一个个字符判断,收到完整的一行数据后进行处理。
追问
嗯,这个方法我也想了,不过不知道该具体怎么做。
是先判断第一个字符是不是@,如果是的话就存到一个char数组,然后继续往下判断?如果第二个字符不对,那第一个字符怎么办?新手,求带~!
追答
用有限状态机 收到 | 进入状态1, @进入2 p进入3.。。。 h进入状态7, 7之后收到其他数保存,收到|进入8,。。。。 最后收到;进入倒数第二个状态, |进入最后一个状态,处理收到的数据
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询