xbee s2 api transmission Question

Hey guys, i have a question about my project with UNO R3 and XBEE S2 transmission. I use a couple of sensors like a RF temperature sensor, two SHT75 sensors, a 3-axis accelemeter and a illumination sensen. And after collect the data, we use XBEE(S2,API mode) to send the data to the gateway,every round is about 1 second.

1.the first problem is the data is about 16 bytes but the packet does not send successful every round. Sometime it works, and sometimes it does’nt. but the
payload of xbee can be 60 or 70 bytes in the datasheet…
but if i put the payload as some simply integer(like 1, 2, 3),not the data from sensor, and the transmission will be stable.

2.after meet the problem above, i divide the data into two packets(each with 8 bytes payload), and the first packet is very stable but the second is very unstable. as mentioned above, if i put some number into the second packets instead of the sensing data the second packet will become stable and send successfully every round.

so i think its the code problem but idk where is the problem. i try to change the baud rate or increasing the delay time between the two packets. does someone know where is the problem~thx~the following is my code:

#include 
#include 
#include 
#include 
#include 
#include "Wire.h"
#include "MMA845XQ.h"

/////////////////////////////XBEE setup//////////////////////////////////
XBee xbee = XBee();
XBeeAddress64 remoteAddress = XBeeAddress64(0x00000000, 0x00000000);
ZBRxResponse zbRx = ZBRxResponse();
ZBTxStatusResponse zbTxStus = ZBTxStatusResponse();

uint8_t payload[] = {0,0,0,0,0,0,0,0,0};  
uint8_t payload1[] = {0,0,0,0,0,0,0,0,0}; 

/////////////////////////////accelemeter//////////////////////////////////
MMA845XQ accel;

////////////////////////// SHT1 serial data and clock ////////////////////
const byte dataPin =  2;                 
const byte sclkPin =  3;                 
Sensirion sht = Sensirion(dataPin, sclkPin);
unsigned int rawData;
float temperature;
float humidity;
byte stat;

////////////////////////// SHT2 serial data and clock ////////////////////
const byte dataPin1 =  4;               
const byte sclkPin1 =  5;                
Sensirion sht1 = Sensirion(dataPin1, sclkPin1);
unsigned int rawData1;
float temperature1;
float humidity1;
byte stat1;

///////////////////////////////illumination sensor////////////////////////
int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;   // variable to store the value coming from the sensor
long int pardata, pardata_low, pardata_hi, real_pardata;
uint16_t illumindata = 0;

void setup () {
  i2c_init(); //Initialise the i2c bus
  PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
  Wire.begin();
  accel.begin(false, 2);
  Serial.begin(115200);
  xbee.begin(Serial);
}

void loop () {
       

    payload[0]=10;
    payload1[0]=11;
    
    
    /////////////////////RF temperature sensor/////////////////////////////
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck(); //Read 1 byte and then send ack
    data_high = i2c_readAck(); //Read 1 byte and then send ack                                        
    pec = i2c_readNak();
    i2c_stop();
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;
    float celcius = tempData - 273.15;
    float fahrenheit = (celcius*1.8) + 32;

    celcius *= 100;
    int a = int(celcius)+1;
    payload[1] = a >> 8 & 0xff;
    payload[2] = a & 0xff;   
   
  ////////////////////////////illumination sensor////////////////////////////////
  sensorValue = analogRead(sensorPin);
  TSR(sensorValue);
    
  payload[3] = pardata_low >> 8 & 0xff;
  payload[4] = pardata_low & 0xff;
  
  ////////////////////////////3-axis accelemeter sensor////////////////////////////////
  accel.update();
  payload[5] = accel.getX()*10;
  payload[6] = accel.getY()*10;
  payload[7] = accel.getZ()*10;

  delay(100);
  
  //////////////////////////////xbee send first packet///////////////////////////////////////////////
  xbee=XBee();
  xbee.begin(Serial);
  ZBTxRequest zbTx = ZBTxRequest(remoteAddress,payload, sizeof(payload));
  zbTx.setAddress16(0xfffe); 
  xbee.send(zbTx);
  
  delay(500);
  
  //////////////////////////SHT 1x temperature and humidity sensor////////////////////////////////////
  sht.readSR(&stat);                     // Read sensor status register
  sht.writeSR(LOW_RES);                  // Set sensor to low resolution
  sht.readSR(&stat);                     // Read sensor status register again
  sht.measTemp(&rawData);                // sht.meas(TEMP, &rawData, BLOCK)
  sht.meas(TEMP, &rawData, NONBLOCK);
  temperature = sht.calcTemp(rawData);
  sht.measHumi(&rawData);                // sht.meas(HUMI, &rawData, BLOCK)
  humidity = sht.calcHumi(rawData, temperature);
  sht.meas(HUMI, &rawData, NONBLOCK);
  humidity = sht.calcHumi(rawData, temperature);
  temperature *= 100;
  a = int(temperature)+1;

  payload1[1] = a >> 8 & 0xff;
  payload1[2] = a & 0xff;
  
  humidity *= 100;
  a = int(humidity)+1;
  payload1[3] = a >> 8 & 0xff;
  payload1[4] = a & 0xff;  
  
  delay(10);
               
  sht1.readSR(&stat1);             
  sht1.writeSR(LOW_RES);                  // Set sensor to low resolution
  sht1.readSR(&stat1);
  sht1.measTemp(&rawData1);                // sht.meas(TEMP, &rawData, BLOCK)
  temperature1 = sht1.calcTemp(rawData1);
  sht1.measHumi(&rawData1);                // sht.meas(HUMI, &rawData, BLOCK)
  humidity1 = sht1.calcHumi(rawData1, temperature1);

  delay(10);
  
  temperature1 *= 100;
  a = int(temperature1)+1;
  payload1[5] = a >> 8 & 0xff;
  payload1[6] = a & 0xff;  
  
  humidity1 *= 100;
  a = int(humidity1)+1;
  payload1[7] = a >> 8 & 0xff;
  payload1[8] = a & 0xff;  
  
 //////////////////////////////xbee send second packet///////////////////////////////////////////////
  xbee=XBee();
  xbee.begin(Serial);
  zbTx = ZBTxRequest(remoteAddress,payload1, sizeof(payload1));
  zbTx.setAddress16(0xfffe); //NODE NUM UNKNOWN
  xbee.send(zbTx);  
  delay(500);
}

void TSR(int sensorValue)
{
  illumindata = (sensorValue * 4 * 5) / 1.5;
  pardata = 6250/6144*illumindata*10;
  
  if(pardata > 0)  //add!!!!
  {	
    if(pardata < 11500)
    {
      
      real_pardata = 0.0000000020561*pardata*pardata*pardata-0.00002255*pardata*pardata+0.25788*pardata-6.481;
      if (real_pardata < 0)
      {
        real_pardata = 0;
      }
    
      pardata_hi = real_pardata/65535;
      pardata_low = real_pardata%65535;
    }
    else
    {
      real_pardata = 0.0000049204*pardata*pardata*pardata-0.17114*pardata*pardata+1978.7*pardata-7596900;
      if (real_pardata < 0)
      {
	real_pardata = 0;
      }
      pardata_hi = real_pardata/65535;
      pardata_low = real_pardata%65535;
    }
  }
  else
  {
    pardata_hi = 0;
    pardata_low = 0;
  }
}

I am now having the same problem. In my opinion, that’s the problem of payload.
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
There, the payload should be uint8_t and we couldn’t change any data type. My accelerometer is giving data like 522 or above but when I transmit it, it could give maximum 255.
Have you already found any solution for this? Please kindly share me if you have already solved to transmit accelerometer data.

Thanks in advance.