मैक पता Xbee Arduino प्राप्त करें




(2)

मैं एक्सबी का मैक एड्रेस प्राप्त करना चाहता हूं, लेकिन मैं सफल नहीं रहा हूं।

मेरे पास निम्न कोड है

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 मान थी, क्योंकि myaddress मैक के पते में 64 बाइट हैं I

लेकिन सरणी में केवल 8 मान हैं, उदाहरण के लिए: मूल 0013a200408a31bb पता है 0013a200408a31bb परिणाम फ़ंक्शन getMyAddress 013a20408a31bb

मेरे फ़ंक्शन को दो शून्य खो देता है

मैं निम्नलिखित कोड के साथ मैक पते को मुद्रित करता हूं:

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

कोई विचार?


मैक पता 64 बिट है, जो 8 बाइट्स (64 बिट्स / (8 बिट्स / बाइट) हैं)। ATSH और ATSL दोनों एक 4-बाइट मूल्य के साथ जवाब देते हैं। तो आपको my address को 8 बाइट्स के रूप में परिभाषित करना चाहिए, और myaddress[i+4] को my address को कॉपी करना myaddress[i+4]

ध्यान दें कि आप बाइट्स के माध्यम से पाशन की बजाय memcpy() उपयोग कर सकते हैं:

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

मैं Arudino के सीरियल से परिचित नहीं हूँ। प्रिंट Serial.print() , लेकिन अगर यह अग्रणी शून्य के साथ एक हेक्स बाइट मुद्रण का समर्थन नहीं करता है, तो आप मैक को प्रिंट कर सकते हैं:

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