Java 获取Arduino UNO r3上XBee数据包的有效负载值

Java 获取Arduino UNO r3上XBee数据包的有效负载值,java,arduino,xbee,Java,Arduino,Xbee,我正在做一个使用XBee S1作为发射机/接收机的项目。以下是我正在使用的硬件: 协调员:带XBee S1模块的XBee USB EXplorer v2.0 终端设备:带有XBee和XBee S1模块的r3.0 项目的目的很简单,即打开/关闭。以下是代码(控制器): 这是Arduino(终端设备)的代码: 这些值保持不变,但我已将输入值从0更改为1 这是我的Java终端(控制台)的示例输出: 我确信这是有效负载值(用^^^^标记): 但是如何通过Arduino获得这种价值呢 无论如何,我参考了教

我正在做一个使用XBee S1作为发射机/接收机的项目。以下是我正在使用的硬件:

  • 协调员:带XBee S1模块的XBee USB EXplorer v2.0
  • 终端设备:带有XBee和XBee S1模块的r3.0
  • 项目的目的很简单,即打开/关闭。以下是代码(控制器):

    这是Arduino(终端设备)的代码:

    这些值保持不变,但我已将输入值从0更改为1

    这是我的Java终端(控制台)的示例输出:

    我确信这是有效负载值(用^^^^标记):

    但是如何通过Arduino获得这种价值呢


    无论如何,我参考了教程。

    好吧,在做了一些搜索之后,通过Arduino获得XBee有效负载值的最佳方法是使用,正如我读到的这个站点:。以下是获取“有效载荷”值的代码:

    #include<Xbee.h>
    int DEBUG = 13;
    XBee xbee = XBee();
    XBeeResponse response = XBeeResponse();
    Rx16Response rx16 = Rx16Response();
    
    void setup() {
      pinMode(DEBUG, OUTPUT);
      Serial.begin(9600);
      DEBUG = 0;
    }
    
    void loop() {
     xbee.readPacket();
    
     if(xbee.getResponse().isAvailable()){
       lcd.print("Data received");
         if(xbee.getResponse().getApiId() == RX_16_RESPONSE){
           xbee.getResponse().getRx16Response(rx16);
    
           uint8_t payload = rx16.getData(0);//this is the payload value, easy to get it :D
         }
     }     
    }
    
    #包括
    int-DEBUG=13;
    XBee XBee=XBee();
    XBEERResponse response=XBEERResponse();
    Rx16Response rx16=Rx16Response();
    无效设置(){
    pinMode(调试、输出);
    Serial.begin(9600);
    调试=0;
    }
    void循环(){
    xbee.readPacket();
    if(xbee.getResponse().isAvailable()){
    lcd.打印(“收到的数据”);
    if(xbee.getResponse().getapid()==RX\u 16\u RESPONSE){
    xbee.getResponse().getRx16Response(rx16);
    uint8_t payload=rx16.getData(0);//这是有效负载值,很容易得到:D
    }
    }     
    }
    
    那是!!:D

    #include <LiquidCrystal.h>
    int LED = 12;                //Turn this LED on or off, depending on packet rx'd
    int debugLED = 13;           //Flash light to indicate rx
    int packet;                 //Packet will be two bytes in length
    int analogValue;
    int debugValue = 0;
    int discard;
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    
    void setup() {
      pinMode(LED, OUTPUT);
      pinMode(debugLED, OUTPUT);
      Serial.begin(9600);
      packet = 0x01;
      lcd.begin(16,2);
    }
    
    void loop() {
     lcd.setCursor(0, 1); 
     if(Serial.available() >= 16){     //<--Changing the value from 21 to 16 fixed the problem! 
    
        debugValue = 0;
    
        debugValue = Serial.read();
    
        if(debugValue == 0x7e){      //Look for starting byte
          lcd.clear();
          lcd.print(debugValue);
          delay(500);
          digitalWrite(debugLED, HIGH);    //Flash Arduino LED (not the one on digital pin 11)
          delay(1000);                          //to indicate rx'ing data
          digitalWrite(debugLED, LOW);
          //lcd.print(debugValue);
    
    
          for(int i = 2; i != 10; i++){      //Discard unused data (see XBee API protocol for more info)
            discard = Serial.read();
            if (i != 8)
              packet = discard;
              // print the number of seconds since reset:
             if(i == 5)
             lcd.setCursor(0,1);
             lcd.print(packet);
             delay(500);
          }
          lcd.print(discard);
       }
     }
     if(packet == 0x7e)
         digitalWrite(LED, HIGH);
     else
         digitalWrite(LED, LOW);
    }
    
    126 0 6 129 125 49 125 49 125 125 29 29
    
    1
    
    XBee request is: 0x7e,0x00,0x06,0x01,0x02,0x22,0x22,0x00,0x01,0xb7
    Response receivedapiId=TX_STATUS_RESPONSE (0x89),length=3,checksum=0x75,error=false,frameId=0x01,status=SUCCESS
    Response success
    Enter a new command for LED: 0 to turn the LED OFF, 1 to turn on
    0
    
    XBee request is: 0x7e,0x00,0x06,0x01,0x03,0x22,0x22,0x00,0x00,0xb7
    Response receivedapiId=TX_STATUS_RESPONSE (0x89),length=3,checksum=0x74,error=false,frameId=0x02,status=SUCCESS
    Response success
    Enter a new command for LED: 0 to turn the LED OFF, 1 to turn on
    
    0x7e,0x00,0x06,0x01,0x02,0x22,0x22,0x00,0x01,0xb7
                                            ^^^^
    
    #include<Xbee.h>
    int DEBUG = 13;
    XBee xbee = XBee();
    XBeeResponse response = XBeeResponse();
    Rx16Response rx16 = Rx16Response();
    
    void setup() {
      pinMode(DEBUG, OUTPUT);
      Serial.begin(9600);
      DEBUG = 0;
    }
    
    void loop() {
     xbee.readPacket();
    
     if(xbee.getResponse().isAvailable()){
       lcd.print("Data received");
         if(xbee.getResponse().getApiId() == RX_16_RESPONSE){
           xbee.getResponse().getRx16Response(rx16);
    
           uint8_t payload = rx16.getData(0);//this is the payload value, easy to get it :D
         }
     }     
    }