2014-02-19 2 views
3

xbee의 MAC 주소를 가져오고 싶지만 성공하지 못합니다.MAC 주소 받기 Xbee Arduino

다음 코드가 있습니다. Xbee MAC 주소가 64 바이트를 포함하기 때문에

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]; 
     } 
     } 
    } 
    } 
} 

I은 ​​10 개 myaddress 배열 값이었다 바란다.

는 그러나 배열은 예를 들어, 단지 8 값을 포함합니다 : 원래 Xbee 주소 0013a200408a31bb 결과 기능 getMyAddress 내 함수는 두 개의 0을 잃게 013a20408a31bb

입니다.

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

어떤 아이디어 :

나는 다음과 같은 코드를 사용하여 MAC 주소를 인쇄?

답변

1

MAC 주소는 64 비트이며 8 바이트입니다 (64 비트/(8 비트/바이트)). ATSHATSL은 모두 4 바이트 값으로 응답합니다. 따라서 my address을 8 바이트로 정의하고 ATSLmyaddress[i+4]에 복사해야합니다.

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

당신이, 내가 Arudino의 Serial.print()에 익숙하지 해요,하지만 제로를 선도 헥스 바이트 인쇄를 지원하지 않는 경우 대신 바이트 통해 반복의 memcpy()을 사용할 수 있습니다

주 다음과 함께 MAC을 인쇄 할 수 있습니다.

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

문제는 숫자 인 경우 함수는 앞에 0을 인쇄하지 않습니다 각 바이트 사이에 공간이 10 미만

: 00 13 a2 00 40 8a 31 bb

것은 당신이 공백으로 인쇄하는 것 : 0 13 a2 0 40 8a 31 bb

앞에 오는 0으로 16 진수 값을 인쇄하는 간단한 방법은 없다고 생각하지만 각 바이트 사이에 공백이 있도록 인쇄 방법을 변경할 수 있습니다.

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