Problema com conexão serial

Olá!

Estou tendo dificuldade em implementar um simples programa de ECO usando o Arduino UNO e módulos XBEE da série 1.

Pretendo montar um sistema para aquisição de dados em uma rede ZigBee. Por isso estou iniciando com um programa de ECO que envia uma string do PC para o Arduino e deveria receber esse eco, o que não está ocorrendo.

Disponho de um adaptador USB serial, para conectar um módulo XBEE no computador.

Na outra ponta do enlace, está o Arduino, sobre o qual eu montei um ProtoShield, com o módulo XBEE montado sobre um adaptador (pinos em polegada para pinos em mm). O módulo XBEE está alimentado por 3,3V. Como o Arduino trabalha com 5V e o módulo XBEE com 3,3V, tive que fazer um divisor de tensão para transformar a tensão de 5V enviada pelo TX do Arduino em uma tensão de 3,3V, adequada ao XBEE. Conectei o pino de RX do Arduino diretamente ao TX do Módulo XBEE.

Fiz um teste de “loop back” com um jumper existente no adaptador e consegui replicar os caracteres digitados no PC distante. Assim, creio que náo há problema de casamento entre os módulos. O módulo do PC deverá atuar como Coordenador da rede e o remoto irá ler algum sinal analógico ou digital e enviar o resultado ao PC, para exibição e processamento.

Certo da conexão dos módulos, criei um sketch a partir de um exemplo do IDE do Arduino (SoftwareSerialExample), com uma porta serial nos pinos 2 e 3. Deixei o Arduino alimentado pela porta USB e ativei o Serial Monitor para observar a comunicação.

O programa inicia e envia uma mensagem de saudação para o Monitor Serial (Goodnight Moon). Do lado do PC, qualquer palavra digitada chega ao Monitor Serial, mas não é replicada pela serial para o PC.

Agradeço qualquer ajuda.

Zeppel

Coloca o código de ambos

Olá,

Segue o código:

/*
Software serial multple serial test

Receives from the hardware serial, sends to software serial.
Receives from software serial, sends to hardware serial.

The circuit:

  • RX is digital pin 2 (connect to TX of other device)
  • TX is digital pin 3 (connect to RX of other device)

created back in the mists of time
modified 9 Apr 2012
by Tom Igoe
based on Mikal Hart's example

This example code is in the public domain.

*/
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

Serial.println("Goodnight moon!");

// set the data rate for the SoftwareSerial port

delay(2000);
mySerial.begin(9600);
mySerial.println("Hello, world?");
}

void loop() // run over and over
{
while (mySerial.available()){
Serial.write(mySerial.read());
// if (Serial.available())
mySerial.write(Serial.read());
}
}

Obrigado pela atenção.

Zeppel

while (mySerial.available()){
    Serial.write(mySerial.read());
 // if (Serial.available())
    mySerial.write(Serial.read());

Bom existe uma livraria mais recente - Newsoftserial veja aqui NewSoftSerial | Arduiniana

Penso que o problema possa ser por nao ter a funcao mySerial.listen(); que irá colocar em modo de escuta
Aconcelho voce a usar a lib mais recente pois nao tenho certeza se poderá ser isso.

while (mySerial.available()){
Serial.write(mySerial.read());
// if (Serial.available())
mySerial.write(Serial.read());

Obrigado pela resposta. Já tentei esse site www.arduiniana.org, mas verifiquei lá mesmo uma mensagem dizendo que, a partir da versão 1.0 do Arduino, essa biblioteca já havia sido incorporada na biblioteca SoftwareSerial. Ou seja, a biblioteca atual SoftwareSerial já seria a NewSoftwareSerial.

De qualquer modo, vou tentar mais um pouco colocando a função mySerial.listen() antes de esperar pela resposta do Arduino a um sinal enviado.

Obrigado, mais uma vez.

Zeppel