punto - Obtener la dirección MAC Xbee Arduino
xbee s1 arduino (2)
Quiero obtener la dirección MAC de xbee, pero no estoy teniendo éxito.
tengo el siguiente código.
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];
}
}
}
}
}
Esperé que la matriz myaddress fuera de 10 valores, porque la dirección MAC de Xbee contiene 64 bytes.
Pero la matriz contiene solo 8 valores, por ejemplo: Dirección original de Xbee es 0013a200408a31bb
Función de resultado getMyAddress
es 013a20408a31bb
Mi función pierde dos ceros.
Imprimo la dirección MAC con el siguiente código:
for(int i=0; i < 10; i++)
Serial.print(myaddress[i], HEX);
¿Algunas ideas?
El problema es que su función no imprime un cero inicial si el número es menor que 10.
Con espacios entre cada byte: 00 13 a2 00 40 8a 31 bb
Qué está imprimiendo con espacios: 0 13 a2 0 40 8a 31 bb
No creo que haya una forma simple de imprimir valores hexadecimales con un cero inicial, pero puedes cambiar la forma en que imprimes para tener un espacio entre cada byte:
for(int i=0; i < 10; i++) {
Serial.print(myaddress[i], HEX);
Serial.print(" ");
}
La dirección MAC es de 64 bits, que es de 8 bytes (64 bits / (8 bits / byte)). ATSH
y ATSL
responden con un valor de 4 bytes. Por lo tanto, debe definir my address
como 8 bytes y copiar ATSL
en ATSL
myaddress[i+4]
.
Tenga en cuenta que puede usar memcpy()
lugar de recorrer los bytes:
memcpy( &myaddress[i+4], atResponse.getValue(), 4);
No estoy familiarizado con el Serial.print()
de Arudino Serial.print()
, pero si no es compatible con la impresión de un byte hexadecimal con cero a la izquierda, puede imprimir el MAC con:
for (int i = 0; i < 8; i++) {
if (myaddress[i] < 0x10) Serial.print( "0");
Serial.print( myaddress[i], HEX);
}