xBee communication problem

well im not really expert but if u want my example project 5 module xbee s2c comunnication.
my config xbee
pan id 123
//coordinator SH 13A200 SL 41630C48 DH 0 DL FFFF api mode 2
//end dev SH 13A200 SL 41554A03 DH 13A200 DL 41630C4B api mode 2
//router 1 SH 13A200 SL 41554A05 DH 0 DL 0 api mode 2
//router 2 SH 13A200 SL 41673405 DH 0 DL 0 api mode 2
//router 3 SH 13A200 SL 41630C4B DH 0 DL 0 api mode 2
end device

#include <XBee.h>
XBee xbee = XBee();
uint8_t data[] = {'H','I'};
// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x0013A200, 0x41630C4B);
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(data));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();
int statusLed = 13;
int errorLed = 13;
void setup() {
   Serial.begin(9600); //Baud rate: 9600
   pinMode(statusLed, OUTPUT);  
   pinMode(errorLed, OUTPUT);  
   xbee.setSerial(Serial);
}
 
void loop {
    xbee.send(zbTx);
    // after sending a tx request, we expect a status response
    flashLed(statusLed, 1, 100);
    if (xbee.readPacket(500))// wait 500ms if true
   { 
       if (xbee.getResponse().isAvailable()) {
          // got a response! // trx packet from xbee to variable         
           if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
              xbee.getResponse().getZBTxStatusResponse(txStatus);
              if (txStatus.getDeliveryStatus() ==   SUCCESS) {
                      // success.  time to celebrate
                      flashLed(statusLed, 5, 100);
                      //zbTx.setFrameId(xbee.getNextFrameId());
              }   
              else {
                       // the remote XBee did not receive our packet. is it powered on?
                       flashLed(errorLed, 3, 50);
              }
         }
         else if (xbee.getResponse().isError()) {
              //Serial.print("Error reading packet.  Error code: ");  
              //Serial.println(xbee.getResponse().getErrorCode());
              flashLed(errorLed, 6, 100);
         }
         } else {
                flashLed(statusLed, 2, 100);
                //no response
         }
    }//
    else
    {
           //time out after 500ms for read packet
    }
}
void flashLed(int pin, int jumlah, int wait) { 
   for (int i = 0; i < jumlah; i++) {
       digitalWrite(pin, HIGH);
       delay(wait);
       digitalWrite(pin, LOW);   
       if (i + 1 < jumlah) {
          delay(wait);
       }
   }
}

router

#include <XBee.h>
#include <AltSoftSerial.h>
AltSoftSerial xb;
uint8_t payload[] = {0,0} //iniate array byte for receive because 2 char  H,I
ZBRxResponse zbRx = ZBRxResponse();
ModemStatusResponse msr = ModemStatusResponse();
// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x00000000, 0x41673405);// just change to other address you want forward
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();
void setup()
{
   Serial.begin(9600);
   xbee.setSerial(xb);
   xb.begin(9600);
   xb.println("ready");
}
void loop()
{
   // 1. This will read any data that is available:
   xbee.readPacket();
   // 2. Now, to check if a packet was received:
   if (xbee.getResponse().isAvailable())
   {
      // got packet from xbee
      if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE)
      {
          // trx packet from xbee to variable
          xb.print("Got an rx packet from: ");
          XBeeAddress64 senderLongAddress = zbRx.getRemoteAddress64();
          print32Bits(senderLongAddress.getMsb());
          xb.print(" ");
          print32Bits(senderLongAddress.getLsb());
          xb.println();
          xbee.getResponse().getZBRxResponse(zbRx);
          if (zbRx.getOption() == ZB_PACKET_ACKNOWLEDGED) {
              // the sender got an ACK
              flashLed(statusLed, 5, 100);
              xb.println("packet acknowledged");
          } 
          else {
              // we got it (obviously) but sender didn't get an ACK
              flashLed(errorLed, 2, 100);
              xb.println("packet not acknowledged");
          }         
          xb.print("Packet length is ");
          xb.print(zbRx.getPacketLength(), DEC);
          xb.print(", data payload length is ");
          xb.print(zbRx.getDataLength(),DEC); 
          xb.print(" checksum is ");
          xb.println(zbRx.getChecksum(), HEX);   
          xb.println("Received Data: ");
          for (int i = 0; i < zbRx.getDataLength(); i++) {
          print8Bits(zbRx.getData()[i]);//
          payload[i]=zbRx.getData()[i];
          xb.print(' ');
          }
          xb.println();
          //getFrame for format api start delimiter 0x7E bla bla
          //dataOffset for payload packet
          //getdatalength for data payload length
          zbTx.setPayload(zbRx.getFrameData() + zbRx.getDataOffset(), zbRx.getDataLength());
          xbee.send(zbTx);
          xb.println("Forward packet");
      } else {
           xb.print("Not packet received, other status");    
      }     
   }
   else if (xbee.getResponse().isError()){
       Serial.print("error code:");
       Serial.print(xbee.getResponse().getErrorCode());
       if (xbee.getResponse().getErrorCode()==1){
          xb.println(" Checksum error");      
       } else 
       if (xbee.getResponse().getErrorCode()==3){
          xb.println(" Unexpected Start Byte"); 
       }
   }
   else {
       xb.println("packet loss");
   }
   delay(500);
}// END OF LOOP

coordinator

#include <XBee.h>
#include <AltSoftSerial.h>
AltSoftSerial xb;
uint8_t payload[] = {0,0} //iniate array byte for receive because 2 char  H,I
ZBRxResponse zbRx = ZBRxResponse();
ModemStatusResponse msr = ModemStatusResponse();
void setup()
{
   Serial.begin(9600);
   xbee.setSerial(xb);
   xb.begin(9600);
   xb.println("ready");
}
void loop()
{
   // 1. This will read any data that is available:
   xbee.readPacket();
   // 2. Now, to check if a packet was received:
   if (xbee.getResponse().isAvailable())
   {
      // got packet from xbee
      if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE)
      {
          // trx packet from xbee to variable
          xb.print("Got an rx packet from: ");
          XBeeAddress64 senderLongAddress = zbRx.getRemoteAddress64();
          print32Bits(senderLongAddress.getMsb());
          xb.print(" ");
          print32Bits(senderLongAddress.getLsb());
          xb.println();
          xbee.getResponse().getZBRxResponse(zbRx);
          if (zbRx.getOption() == ZB_PACKET_ACKNOWLEDGED) {
              // the sender got an ACK
              flashLed(statusLed, 5, 100);
              xb.println("packet acknowledged");
          } 
          else {
              // we got it (obviously) but sender didn't get an ACK
              flashLed(errorLed, 2, 100);
              xb.println("packet not acknowledged");
          }         
          xb.print("Packet length is ");
          xb.print(zbRx.getPacketLength(), DEC);
          xb.print(", data payload length is ");
          xb.print(zbRx.getDataLength(),DEC); 
          xb.print(" checksum is ");
          xb.println(zbRx.getChecksum(), HEX);   
          xb.println("Received Data: ");
          for (int i = 0; i < zbRx.getDataLength(); i++) {
          print8Bits(zbRx.getData()[i]);//
          payload[i]=zbRx.getData()[i];
          xb.print(' ');
          }
          xb.println();
          c[0]= zbRx.getData(0);
          c[1]= zbRx.getData(1);
          xb.print("Value ");
          xb.println(c);
      } else {
           xb.print("Not packet received, other status");    
      }     
   }
   else if (xbee.getResponse().isError()){
       Serial.print("error code:");
       Serial.print(xbee.getResponse().getErrorCode());
       if (xbee.getResponse().getErrorCode()==1){
          xb.println(" Checksum error");      
       } else 
       if (xbee.getResponse().getErrorCode()==3){
          xb.println(" Unexpected Start Byte"); 
       }
   }
   else {
       xb.println("packet loss");
   }
   delay(500);
}// END OF LOOP
void print32Bits(uint32_t dw){
  print16Bits(dw >> 16);
  print16Bits(dw & 0xFFFF);
}

void print16Bits(uint16_t w){
  print8Bits(w >> 8);
  print8Bits(w & 0x00FF);
}

void print8Bits(byte c){
  uint8_t nibble = (c >> 4);
  if (nibble <= 9)
    Serial.write(nibble + 0x30);
  else
    Serial.write(nibble + 0x37);
      
  nibble = (uint8_t) (c & 0x0F);
  if (nibble <= 9)
    Serial.write(nibble + 0x30);
  else
    Serial.write(nibble + 0x37);
}