Comunicação Xbee- Java - Arduino

votos
0

Eu sou novo para isso e eu estou tentando fazer um programa simples que irá enviar um comando para o arduino e, em seguida, enviar uma resposta de volta para java via xbee. Eu sou capaz de enviar comandos para arduino mas eu sou incapaz de ler uma resposta dele. Eu estou usando XBee S2C com a configuração API-2. Como posso ler a resposta do arduino no meu java?

Aqui está o meu código para 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);
        }
    }
}

e este é meu código para 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);
    }
}
Publicado 20/09/2018 em 04:15
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Depois de alguns reasearches eu encontrei um pedaço de documentação da Digi que pode ajudá-lo.

Como eu pensei no meu primeiro comentário, o problema parece vir da parte em que você tenta ler datas a partir do dispositivo.

De acordo com esta documentação: https://www.digi.com/resources/documentation/digidocs/90001438/reference/r_xb_java_lib_data_reception_callback.htm

Você tem que criar um DataListener um registrá-lo para o seu XBeeDevice.

Eles ainda dar-lhe algumas dicas sobre informações XBeeMessage.

Eu não sei o seu nível de Java, mas todo o código é fornecido no link acima.

Se você quiser ler mais sobre os ouvintes, verificar isso: Qual é o objetivo de um ouvinte em Java?

Respondeu 20/09/2018 em 07:58
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more