bool receiveData(float& speed, uint16_t& direction) {
uint8_t buffer[FRAME_SIZE];
ssize_t bytes_read = 0;
// Reading exact number of bytes for one frame
memset(buffer,0,sizeof(buffer));
if (uart.readable()) {
ThisThread::sleep_for(1ms); // Polling interval
bytes_read += uart.read(buffer ,FRAME_SIZE);
}
// Validate frame header and length
if (buffer[0] == 0x42 && buffer[1] == 0x01 && buffer[2] == 10) {
// Parsing speed
UInt16Union directionUnion;
FloatUnion speedUnion;
speedUnion.bytes[0]=buffer[3];
speedUnion.bytes[1]=buffer[4];
speedUnion.bytes[2]=buffer[5];
speedUnion.bytes[3]=buffer[6];
directionUnion.bytes[0]=buffer[7];
directionUnion.bytes[1]=buffer[8];
direction = directionUnion.asUInt16;
speed = speedUnion.asFloat;
unsigned char check=0;
for (size_t i = 0; i < 9; i++)
{
check += buffer[i];
}
if (check!=buffer[9]) return false;
sendData(speed,direction);
// buffer[9]=check;
// uart.write(buffer, 10);
// sendData(speedUnion.asFloat,directionUnion.asUInt16);
return true;
}
return false;
}
int main() {
UARTCommunication uartCom(P0_10, P0_11, 115200);
float speed = 0.0;
uint16_t direction = 0;
while (1)
{
if (uartCom.receiveData(speed, direction)) {
// uartCom.sendData(speed,direction);
icarStr.SpeedSet=speed;
icarStr.ServoPwmSet=direction;
}
}
}
I am exhausted in debugging the code above on the purpose of parsing data from the BufferedSerial (for almost two days ) .
However,as I tested the code , I encountered a high error package rate (5 times sending, only 1 time correct on average).
Is it normal? maybe the wrong way for coding? Thank you for your help