Получить MAC-адрес Xbee Arduino

Я хочу получить MAC-адрес xbee, но мне это не удается.

У меня есть следующий код.

******* myaddress[10];
******* shCmd[] = {'S','H'};
******* 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 Функция результата getMyAddress - 013a20408a31bb

Моя функция теряет два нуля.

Я печатаю MAC-адрес с помощью следующего кода:

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

Любые идеи?

2 ответа

MAC-адрес - 64 бита, который составляет 8 байтов (64 бит /(8 бит/байт)). ATSH и ATSL отвечают 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);
}


Проблема заключается в том, что ваша функция не печатает ведущий ноль, если число меньше 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(" ");
}

licensed under cc by-sa 3.0 with attribution.