When reading data from UART, fetching data is not correct

82 Views Asked by At

I am sending data from Xbee 3 pro (router) connected to Teensy 4.0 microcontroller, to another Xbee 3 pro (coordinator). I am successfully getting data,but the data i am getting is not structured correctly as lines. Lines are mostly combined.

printed data:

1.00,4096.00
,-0.21,-161,-0.79,1.03,23.13,1020.02,-0.21,-16.52,0,0,0,0,0.00,0.00,0.90,0.00,131.00,4096.00
,-190.00,-225.00,119.00,-0.51,-0.79,1.03,23.13,1020.02,-0.23,-16.52,0,0,0,0,0.00,0.0,1020.02,-0.23,-16.52,0,0,0,0,0.00,0.00,0.89,0.00,131.00,4096.00
.52,0,0,0,0,0.00,0.00,0.8932,-16.52,0,0,0,0,0.00,0.00,0.88,0.00,131.00,4096.00
020.03,-0.43,-16.52,0,0,0,0,0.00,0.00,0.87,00.79,1.03,23.15,1020.06,-0.50,-16.52,0,0,0,0,0.00,0.00,0.86,0.00,131.00,4096.00
214.00,115.00,-0.52,-0.80,1.03,23.13,10,0.06,0.26,0.98,-182.00,-214.00,115.00,-0.52,-0.80,1.03,23.13,1020.03,-0.27,-16.52,00.80,1.03,23.13,1020.03,-0.27,-16.52,0,0,0,0,0.00,0.00,0.83,0.00,131.00,4096.00

Sending data from Teensy:

void sendDataTotelemetry(){
  
  Serial3.print(millis());
  Serial3.print(",");
  Serial3.print(data.Accel_X);
  Serial3.print(",");
  Serial3.print(data.Accel_Y);
  Serial3.print(",");
  Serial3.print(data.Accel_Z);
  Serial3.print(",");
  Serial3.print(data.Gyro_X_Raw);
  Serial3.print(",");
  Serial3.print(data.Gyro_Y_Raw);
  Serial3.print(",");
  Serial3.print(data.Gyro_Z_Raw);
  Serial3.print(",");
  Serial3.print(data.Gyro_Yaw);
  Serial3.print(",");
  Serial3.print(data.Gyro_Roll);
  Serial3.print(",");
  Serial3.print(data.Gyro_Pitch);
  Serial3.print(",");
  Serial3.print(data.Baro_Temp);
  Serial3.print(",");
  Serial3.print(data.Baro_Pressure);
  Serial3.print(",");
  Serial3.print(data.Baro_Altitude);
  Serial3.print(",");
  Serial3.print(data.Baro_Altitude_Error);
  Serial3.print(",");
  Serial3.print(data.ParachuteOn);
  Serial3.print(",");
  Serial3.print(data.LegsDeployed);
  Serial3.print(",");
  Serial3.print(data.MotorFired);
  Serial3.print(",");
  Serial3.print(data.RocketState);
  Serial3.print(",");
  Serial3.print(data.VoltageValue);
  Serial3.print(",");
  Serial3.print(data.Voltage);
  Serial3.print(",");
  Serial3.print(data.Kal_X_Pos);
  Serial3.print(",");
  Serial3.print(data.Kal_X_PosP);
  Serial3.print(",");
  Serial3.print(data.Gyro_Sens);
  Serial3.print(",");
  Serial3.println(data.Acc_Sens);
}

Getting data from C++ program:

void readTelemetryData(){


    data.telemetry_conn_port = serial_t_port;

    serial_t.open(serial_t_port); 

    if (!serial_t.is_open()){
        data.telemetry_conn_status = "N/A";

    } else{
        
        serial_t.ignore();
        getline(serial_t,incoming_data);
        data.telemetry_conn_status = "SUCCESS";
        if (incoming_data.find(',') != std::string::npos){
            
            data_seperated_t = split_data(incoming_data, ',');

            data.time = data_seperated_t[0];
            data.Accel_X = data_seperated_t[1];
            data.Accel_Y = data_seperated_t[2];
            data.Accel_Z = data_seperated_t[3];
            data.Gyro_X_Raw = data_seperated_t[4];
            data.Gyro_Y_Raw = data_seperated_t[5];
            data.Gyro_Z_Raw = data_seperated_t[6];
            data.Gyro_Yaw = data_seperated_t[7];
            data.Gyro_Roll = data_seperated_t[8];
            data.Gyro_Pitch = data_seperated_t[9];
            data.Baro_Temp = data_seperated_t[10];
            data.Baro_Pressure = data_seperated_t[11];
            data.Baro_Altitude = data_seperated_t[12];
            data.Baro_Altitude_Error = data_seperated_t[13];
            data.ParachuteOn = data_seperated_t[14];
            data.LegsDeployed = data_seperated_t[15];
            data.MotorFired = data_seperated_t[16];
            data.RocketState = data_seperated_t[17];
            data.VoltageValue = data_seperated_t[18];
            data.Voltage = data_seperated_t[19];
            data.Kal_X_Pos = data_seperated_t[20];
            data.Kal_X_PosP = data_seperated_t[21];
            data.Gyro_Sens = data_seperated_t[22];
            data.Acc_Sens = data_seperated_t[23];
            

        } else {

            data.message.push_back(incoming_data) ;
        }

        
        
    serial_t.close();
    }

}
0

There are 0 best solutions below