Я новичок в этом, и я пытаюсь создать простую программу, которая будет отправлять команду в arduino, а затем отправлять ответ обратно в Java через xbee.Я могу отправить команду в Arduino, но не могу прочитать ответ от нее.Я использую XBee S2C с настройкой API-2.Как я могу прочитать ответ от Arduino в моем Java?
Вот мой код для Java:
public class Transmitdataxbee {
private static final String PORT = "COM8";
private static final int BAUD_RATE = 9600;
private static RemoteXBeeDevice myremote;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
XBeeDevice myDevice = new XBeeDevice(PORT, BAUD_RATE);
Scanner input_rpi = new Scanner(System.in);
String data;
try {
myDevice.open();
XBeeNetwork myXBeeNetwork = myDevice.getNetwork();
myXBeeNetwork.setDiscoveryTimeout(10000);
myXBeeNetwork.startDiscoveryProcess();
while (myXBeeNetwork.isDiscoveryRunning()) {
System.out.println("Discovering devices...");
}
myremote = myXBeeNetwork.getDevice(new XBee64BitAddress("0013A20041768E48"));
String nodeIdentifier = myremote.getNodeID();
System.out.print("Node ID: ");
System.out.println(nodeIdentifier);
System.out.println("Enter Command");
data = input_rpi.next();
myDevice.sendData(myremote, data.getBytes());
System.out.println("Current timeout: " + myDevice.getReceiveTimeout() + "milliseconds");
//read from arduino
XBeeMessage edMessage = myDevice.readDataFrom(myremote);
String data_ed = edMessage.getDataString();
System.out.println(data_ed);
} catch (XBeeException e) {
e.printStackTrace(System.out);
myDevice.close();
System.exit(1);
}
}
}
, и это мой код для Arudino
#include <XBee.h>
XBee xbee = XBee();
ZBRxResponse rx = ZBRxResponse();
XBeeAddress64 test = XBeeAddress64(0x0013A200, 0x41768E6E);
ModemStatusResponse msr = ModemStatusResponse();
uint8_t data;
char cmd1[9];
String cmd;
char d_ata;
int j = 0;
int icount = 0;
int count = 32;
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
xbee.setSerial(Serial2);
xbee.setAPImode(2);
Serial.println("Connecting....");
}
void loop() {
xbee.readPacket(50);
if (xbee.getResponse().isAvailable()){
Serial.println("Connected");
Serial.println("Getting Message...");
if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
xbee.getResponse().getZBRxResponse(rx);
Serial.println("Packet received!");
if(rx.getOption() == ZB_PACKET_ACKNOWLEDGED){
Serial.println("Packet acknowledged");
}
cmd = "";
Serial.println("Received Data: ");
for (int i = 0; i < rx.getDataLength(); i++) {
//print8Bits(rx.getData()[i]);
cmd1[i] = (char) rx.getData()[i];
cmd += cmd1[i];
Serial.println(cmd);
Serial.println();
}
if (cmd == "a") {
data = "l";
ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
xbee.send(zbtx);
}
else if (cmd == "w"){
data = "u";
ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
xbee.send(zbtx);
}
else if (cmd == "s"){
data = "d";
ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
xbee.send(zbtx);
}
else if (cmd == "d"){
data = "r";
ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
xbee.send(zbtx);
}
else{
data="e";
ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
xbee.send(zbtx);
}
}
} else if (xbee.getResponse().isError()) {
// some kind of error happened, I put the stars in so
// it could easily be found
Serial.print("************************************* error code:");
Serial.println(xbee.getResponse().getErrorCode(),DEC);
}
}