tutorial punto precio mega librerias library configuracion arduino xbee

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