Java 获取Arduino UNO r3上XBee数据包的有效负载值
我正在做一个使用XBee S1作为发射机/接收机的项目。以下是我正在使用的硬件: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获得这种价值呢 无论如何,我参考了教
无论如何,我参考了教程。好吧,在做了一些搜索之后,通过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
}
}
}