Go Down

Topic: Problemas com serial.read() (Read 1 time) previous topic - next topic

AugustoSantos

Olá pessoal, tudo bem?

Sou novo no Arduino e to passando mals pedaços com ele tentando fazer comunicação Xbee em 2 hops.
Gostaria muito da colaboração de vocês para eu conseguir terminar meu projeto final. Ficarei muito grato pela atenção e ajuda galera!

Então, o que eu estou tentando fazer é enviar pacote de um arduino para o outro estaticamente em hops. São no total de 3 arduinos.
Estou tendo problemas na comunicação dos 2 primeiros, se conseguir resolver isso, o 3º hop acho que fica fácil. Note que todos os 3 arduinos tem uma identificação, no caso (1), (2), (3).
Em poucas palavras, to tentando enviar um pacote de um arduino com XbeeShield (todos possuem) neste formato (2#1#0#) -> (Hostdestino, HostOrigem, hop).

Mas, como disse to tendo problema em um método da minha biblioteca chamado recebeBeacon, que está abaixo:

Beacon Service::recebeBeacon(short id) {

   Beacon beacon;
   String msg;
   
   while(Serial.available() > 0) {
      byte temp = Serial.read();
      msg = msg + (char) temp;           
   }
   Serial.flush();
   
   if (msg.length() > 0) {
      beacon = converteStringParaBeacon(msg);
      delay(1000);
      Serial.flush();
     
      if (verificaMensagemBeacon(beacon,id)) {
         return beacon;
      }
   }
   return beacon;
}

Meu arduino (1) envia o pacote com (2#1#0#), ta ok!
void loop() {
         
           //Send beacon com Dest(2), Source(1), Hop(0)
           beacon = Beacon(2,1,0);
           service.enviaBeacon(beacon);
           delay(2000);
               
}
Mas, quando o arduino (2) pega a mensagem, além da mensagem vir, vem um monte de lixo. Olhem a figura anexada para vocês terem uma ideia.

recebendo...
void loop() {
 
           recebe = service.recebeBeacon(1);
           delay(2000);

           //recebe.getDhost(), recebe.getShost(), recebe.getSALTO() são do tipo short, não sei se o problema ta aqui!!!

           beacon = Beacon(recebe.getDhost(), recebe.getShost(), recebe.getSALTO());         
           Serial.println(service.converteBeaconParaString(beacon));
               
            delay(2000);
}

Fui claro pessoal? O que vocês acham?

Muito obrigado pela atenção!!!

bubulindo

Algumas questões:

- Já experimentaste comunicacão entre o computador e o Arduino com as Xbees?

- Configuraste as XBee? Isso é bastante parecido com o que eu tinha nas minhas. Depois de as configurar, funcionam bem.
This... is a hobby.

AugustoSantos

Olá amigo, obrigado pela atenção.

Então, o que eu estou fazendo é usar tres cabos seriais, do tipo de cabo de impressora, um em cada arduino.
Os tres arduinos tem um skield Xbee, mas eles estao conectados no computador. Faço a comunicação assim, para depois poder usar eles com pilha!!
Não configurei Xbee, você teve problema parecido? Pode me explicar como fez?

abs e muito obrigado.

bubulindo

De repente não me lembro, não. :\

Eu passei por estes tutoriais para o fazer:

http://www.ladyada.net/make/xbee/configure.html
https://sites.google.com/site/xbeetutorial/xbee-introduction/zigbee_setup
http://www.embedded.arch.ethz.ch/xbee-setup.pdf

Eu lembro que na altura passei um bom bocado de tempo e acabei por ler o manual para ver exactamente o que cada parâmetro queria dizer. Talvez valha a pena porque facilita. O que me aconteceu foi que elas precisam dum setup que supostamente viria de fábrica, mas näo vinha. Elas estavam brancas.

Já agora, tens a certeza que não é um problema de bauds?
This... is a hobby.

AugustoSantos

Olá amigão,

Então não é problema de bauds, já usei a 19200 e 9600 e a 19.200 acontece a mesma coisa.
Nunca mexi nessa parte de configuração. Vou tentar ler estes tutoriais que você me passou? Não lembra mesmo o que você fez?? :/

muito obrigado.


Go Up