我正在使用Boost Librarys通过串口与Arduno进行通信。我已经在te PC和Arduino上进行了通信课程。目前,Arduino只是收到缓冲区并回显回显。将缓冲区发送给Arduino,损坏的数据
发送和收到的功能如下:
void CommunicationModuleSerial::SendBuffer(char* Buffer, int Size){
Serial.write((uint8_t*)Buffer, Size);
}
void CommunicationModuleSerial::RecieveBuffer(char *Buffer, int Size){
for(int i=0;i <sizeof(Size); i++){
Buffer[i] = Serial.read();
};
而且函数被调用的Ardunio草图(CM是类的实例):
CommunicationModuleSerial CM;
char Input[10];
char Output[10];
while(1){
if (Serial.available() == 10) {
CM.RecieveBuffer(Input, 10);
CM.SendBuffer(Output, 10);
};
//delay(1000);
Serial.flush();
};
在PC端我使用提升,第一个问题是当我用a和b填充缓冲区时。第二个缓冲区保存a和b,但只能保存b。
char InputBuffer[10];
char OutputBuffer[10];
for(unsigned int i=0; i < sizeof(InputBuffer); i++){
InputBuffer[i] = 'a';
}
for(unsigned int i=0; i < sizeof(OutputBuffer); i++){
OutputBuffer[i] = 'b';
}
cout << "inhoud after filling InputBuffer: " << InputBuffer << endl;
cout << "inhoud after filling OutputBuffer: " << OutputBuffer << endl;;
输出内容如下:灌装后INPUTBUFFER inhoud:灌装后OutputBuffer中AAAAAAAAAA inhoud:bbbbbbbbbbaaaaaaaaaa
我的第一个问题是它如何能成为OutputBuffer中alsow包含的?
接下来是一个简单的while循环,它包含发送和接收函数。
while(1){
// Send buffer
Serial.SendBuffer(InputBuffer, 10);
// Recieve buffer
Serial.RecieveBuffer(OutputBuffer, 10);
cout << "inhoud OutputBuffer: " << OutputBuffer << endl;;
}
的问题是,循环发送操作后几次之后,输出缓冲器还持有BBBBBBBB,里面应该有斌用的覆盖挂起。
在PC端发送和收到的操作如下:
int CommunicationModuleSerial::SendBuffer(char* Buffer, int Size){
Buffer[Size+1] = '\0';
write(*Port,buffer(Buffer, Size));
return COMMSUCCES;
}
int CommunicationModuleSerial::RecieveBuffer(char *Buffer, int Size){
read(*Port,buffer(Buffer, Size));
return COMMSUCCES;
}
谁能帮助我这些问题?提前谢谢了。
更新:
感谢Matthias247我已经sovled一些问题。许多感谢Matthias247。我仍然有数据损坏问题。在Ardunio方面,我将收到的缓冲区发回给我。但是当我这样做时,前两个字符具有正确的值(a),但其余的不是。当我在Adruino一侧使用一个不同的输出缓冲区时,我发送回来,我得到所有正确的值。
此外,循环似乎挂了几个发送和收到的PC端。我认为它阻止了接收功能。任何人都可以帮我解决这些问题吗?
提前感谢
感谢Matthias247的大量扩展,仍然有一些数据损坏的问题。我已经把这些置于更新后的姿势,你知道这个问题可能是什么吗? – Roy08
我也更新了我的答案,以突出一些错误 – Matthias247
感谢Matthias247!这解决了我的问题! – Roy08