2014-02-19 131 views
3

我想获取xbee的MAC地址,但我没有成功。获取MAC地址Xbee Arduino

我有以下代码。

uint8_t myaddress[10]; 

uint8_t shCmd[] = {'S','H'}; 
uint8_t slCmd[] = {'S','L'}; 
AtCommandRequest atRequestSH = AtCommandRequest(shCmd); 
AtCommandRequest atRequestSL = AtCommandRequest(slCmd); 
AtCommandResponse atResponse = AtCommandResponse(); 

void getMyAddress(){ 
    xbee.send(atRequestSH); 

    if(xbee.readPacket(5000)){ 
    if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) { 
     xbee.getResponse().getAtCommandResponse(atResponse); 
     if (atResponse.isOk()){ 
     for(int i = 0; i < atResponse.getValueLength(); i++){ 
      myaddress[i] = atResponse.getValue()[i]; 
     } 
     } 
    } 
    } 
    delay(1000); 
    xbee.send(atRequestSL); 

    if(xbee.readPacket(5000)){ 
    if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) { 
     xbee.getResponse().getAtCommandResponse(atResponse); 
     if (atResponse.isOk()){ 
     for(int i = 0; i < atResponse.getValueLength(); i++){ 
      myaddress[i+6] = atResponse.getValue()[i]; 
     } 
     } 
    } 
    } 
} 

我希望myaddress阵列分别为10个值,这是因为MAC的Xbee地址包含64个字节。

但阵列只包含8个值,例如: 原始的XBee地址是0013a200408a31bb 充值功能getMyAddress013a20408a31bb

我失去功能两个零。

我打印用下面的代码的MAC地址:

​​3210

任何想法?

回答

1

MAC地址为64位,即8个字节(64位/(8位/字节))。 ATSHATSL都以4字节值进行响应。因此,您应该将my address定义为8个字节,并将ATSL复制到myaddress[i+4]

注意,您可以使用memcpy()而不是通过字节循环:

memcpy(&myaddress[i+4], atResponse.getValue(), 4); 

我不熟悉的Arudino的Serial.print(),但如果它不支持与领先的零打印一个十六进制字节,你可以打印MAC:

for (int i = 0; i < 8; i++) { 
    if (myaddress[i] < 0x10) Serial.print("0"); 
    Serial.print(myaddress[i], HEX); 
} 
2

的问题是你的功能不打印前导零,如果数量小于10

每个字节之间的空格:00 13 a2 00 40 8a 31 bb

你所用空格打印:0 13 a2 0 40 8a 31 bb

我不认为有一个简单的方法来打印带有前导零的十六进制值,但是您可以更改打印方式以在每个字节之间留有空格:

for(int i=0; i < 10; i++) { 
    Serial.print(myaddress[i], HEX); 
    Serial.print(" "); 
}