2014-02-19 179 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(" "); 
}