首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取MAC地址Xbee Arduino

获取MAC地址Xbee Arduino
EN

Stack Overflow用户
提问于 2014-02-19 20:52:12
回答 2查看 2.7K关注 0票数 3

我想得到xbee的MAC地址,但我没有成功。

我有下面的代码。

代码语言:javascript
复制
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个值,因为Xbee地址包含64个字节。

但是数组只包含8个值,例如:原始Xbee地址是0013a200408a31bb结果函数,getMyAddress013a20408a31bb

我的函数失去了两个零。

我用以下代码打印MAC地址:

代码语言:javascript
复制
for(int i=0; i < 10; i++)
  Serial.print(myaddress[i], HEX);

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-21 01:11:23

MAC地址为64位,为8字节(64位/ (8位/字节))。ATSHATSL都用一个4字节的值来响应.因此,您应该将my address定义为8个字节,并将ATSL复制到myaddress[i+4]

请注意,您可以使用memcpy()而不是循环遍历字节:

代码语言:javascript
复制
memcpy( &myaddress[i+4], atResponse.getValue(), 4);

我不熟悉Arudino的Serial.print(),但如果它不支持打印带前导为零的十六进制字节,则可以使用以下方法打印MAC:

代码语言:javascript
复制
for (int i = 0; i < 8; i++) {
    if (myaddress[i] < 0x10) Serial.print( "0");
    Serial.print( myaddress[i], HEX);
}
票数 1
EN

Stack Overflow用户

发布于 2014-02-19 23:10:42

问题是,如果数字小于10,则函数不会打印前导零。

在每个字节之间有空格:00 13 a2 00 40 8a 31 bb

用空格打印的内容:0 13 a2 0 40 8a 31 bb

我不认为有一种简单的方法可以打印带前导零的十六进制值,但是您可以更改打印方式,以便在每个字节之间有一个空格:

代码语言:javascript
复制
for(int i=0; i < 10; i++) {
    Serial.print(myaddress[i], HEX);
    Serial.print(" ");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21892175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档