Enviar dado com o SoftwareSerial.h

Olá pessoal,

Estou tentando fazer com que dois arduino se comuniquem. No caso apenas um envia dados enquanto que o outro consequentemente só recebe.
Não sei se estou fazendo alguma besteira mas vamos lá..

Este apenas envia o dado:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // Duemilanove

void setup(){
  Serial.begin(9600);
  mySerial.begin(4800);
  delay(100);
  Serial.println("Estou enviando para o Uno!");
}

void loop(){
  mySerial.write("Enviando");
  
}

e no outro ele só receberia:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // Uno

void setup(){
  Serial.begin(9600);
  mySerial.begin(4800);
  Serial.println("Estou recebendo do Duemilanove!");
}

void loop(){
  String resposta = "";
  if(mySerial.available()){
    entrada = mySerial.read();
    Serial.write(entrada);
  }
}

O arduino 2 nao chega nem a receber nada. No arduino 1 (oq envia) eu fizer algo como:

int var = Serial.read();
Serial.println(mySerial.write(var));

no proprio serial monitor dele, ele me retorna 1. Alguem sabe o por que?

ligaste o pino 2 ao 3??

a funcao mySerial.write, retorna 1. é isso que vês no serial monitor.
que pretendes fazer aí???

Liguei o pino 2 (rx) do arduino uno ao pino 3 (tx) do duemilanove..
Eu pretendia enviar um dado qualquer de um para outro apenas para saber como seria a comunicação pois no futuro estava pretendendo por exemplo, usar um sensor de temperatura e enviar esse valor para o TelosB

Código para emissor:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // Duemilanove

void setup(){
  Serial.begin(9600);
  mySerial.begin(4800);
  delay(100);
  Serial.println("Vamos fazer um rolling counter...");
}
unsigned int count = 0; 
void loop(){
  mySerial.write(count++);
  delay (200); //uma pausa para um kit kat. 
}

Código para receptor.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // Uno

void setup(){
  Serial.begin(9600);
  mySerial.begin(4800);
  Serial.println("Estou recebendo do Duemilanove!");
}

unsigned int entrada = 0; 
void loop(){
//  String resposta = ""; //REGRA NUMERO 1, NUNCA USAR String!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  if(mySerial.available()){
    entrada = mySerial.read();
    Serial.println(entrada);
  }
}

Podes ligar ambos os pinos e assim fazes uma conversa entre ambos. :slight_smile:

Testei o codigo que me passou e constatei coisas do tipo:
como disse liguei o pino 2 (uno - rx) ao pino 3 (duemilanove - tx)
e verifiquei que o duemilanove (que seria para enviar) nao chega a enviar nda.. o led tx dele nem chega a piscar
e no uno o led de tx fica piscando.. foi ai que abri o serial monitor e nao sei o motivo mas ele printa o numero "255"
Alguma ideia de o pq disso? o.O

Ok...

Assumi que entendias o que se passaria.

Em primeiro lugar, se olhares para o esquema do Arduino, vais ver que não existem leds nos pinos 2 e 3.

Segundo sei, o Uno (não tenho um Uno) só pisca os LEDs quando existe algo do outro lado (o teu computador) para comunicar.

Então depois de meteres esses códigos em ambas as placas, deves ligar as duas a portos USB e abrir portas série nesses portos. Eu sei que o Arduino não dá para monitorizar duas portas série, então para isso podes ter de usar outro software, ou então só monitorizar o receptor.

O valor que apareceu na porta série é, ou espero que seja, o contador que implementei no exemplo. Basicamente ele está sempre a enviar um numero crescente e o outro lado quando recebe da newsoftserial, escreve para a hardware serial.

Eu estava tão atento com a biblioteca que acabei esquecendo de setar no proprio setup quem é o pino de entrada e o pino de saida..
finalmente consegui comunicar os dois arduinos =)
Percebi tambem que se eu ligar apenas um fio de um rx com o tx.. ele fica enviando caracteres estranhos, foi preciso entao eu ligar os dois fios (mesmo no meu caso apenas um arduino estiver enviando)
Obrigado bubulindo pela ajudar.. =)