我正在使用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