Comunicación entre arduinos, problema

Hola buen día, quisiera preguntarle si sabrán como puedo comunicarme entre arduinos mega con la comunicación serial, ya que al procedimental común, me refiero rx con tx y tx con rx de los arduinos, me manda muchos basura inicie el flujo de datos o no.
No puedo usar el I2C ya que lo tengo ocupado en otro dispositivo.

gracias saludos.

Te manda basura si no seleccionas los dos puertos a la misma velocidad.
como has inicializado los puertos de los dos Mega?

Serial.begin(9600)  // como baja velocidad

Serial.begin(115200)  // como la mas alta velocidad

uno envia datos con Serial.println(Datos)
y el otro recibe con

if (Serial1.available() >0) {
   char valor = Serial.read();
   Serial.prinln(valor); // imprime dato recibido como caracter
 }

Esto no puede leer ninguna basura.
AHH SUPONGO que conectaste RX con TX y TX con RX y no olvidaste usar GND de ambos MEGAS no?

Si los dos los tengo a 9600 y la lectura la tengo prácticamente como lo muestras.
La basura no es exactamente como se mandara datos al asar, si no, mandas puros espacios. :confused:, y por lo tanto el Serial.available() siempre entra

no has publicado los códigos asi que poco puede decirte.
Lee las normas del foro porque todo esto ocurre porque no has presentado debidamente tu consulta.

ok
las declaraciones son:

Serial.begin(9600); // Velocidad de la conexion del arduino y la cpu
Serial1.begin(9600); // velocidad de la comunicación con el arduino de la puerta trasera

y al momento de el flujo de datos(recepción) es:

for (int i; i < 10; i++) // para fijar un limite de tiempo para esperar respuesta del arduino
{
delay(250);
String S = "";
char s;
while (digitalRead(Com_T_RX == HIGH)) // recepción de datos dependiendo del arduino trasero
{
s = Serial1.read();
S = S + s; // encadenamiento
if (s == '}') // para detectar el fin de la linea y dar un espacio
{
s = Serial1.read();
S = S + s;
http(S); // cuando sea el fin de la linea manda los datos
http("
"); // un salto de linea y borra para rescribir la siguiente linea
S = "";
i = 10;
}
}
}

La variable "Com_T_RX" la agrega para asegurarme que en realidad se estaban mandado información, ya que como te mencione me estaba mandando ""espacios"". Pero este método no funciona del todo bien.
El resto es una función para mandar datos a un modulo wifi.

 while (digitalRead(Com_T_RX == HIGH))  // recepción de datos dependiendo del arduino trasero
    {
      s = Serial1.read();
      S = S + s;                       // encadenamiento
      if (s == '}')                    // para detectar el fin de la linea y dar un espacio
      {
        s = Serial1.read();
        S = S + s;
        http(S);                      // cuando sea el fin de la linea manda los datos
        http("
");               // un salto de linea y borra para rescribir la siguiente linea
        S = "";
        i = 10;
      }
    }
  }

acabas de reinventar el modo en que se leen los datos del puerto serie!!
De donde lo sacaste?
Los datos se leen asi

if (Serial1.avalilable()>0) {
    s = Serial1.read();

Espero darme a entender.
Como lo mencionas hay un método normal,

if (Serial1.avalilable()>0) {
s = Serial1.read();

pero como me empieza a mandar la basura y como estoy usando un while, se mantenía en un ciclo infinito.
asy que cree dos variables

Com_T_RX = 6;
int Com_T_TX = 7;

las cuales estarían igual declaradas y asignadas en ambos arduinos, uno como maestro y otro como esclavo.

La función de estas variables es que cuando el maestro requiera la información, pondrá en HIGH su TX y esperara un HIGH RX dado por el esclavo, cuando sea hasy ya empiezo a capturar los datos

while (digitalRead(Com_T_RX == HIGH)) // recepción de datos dependiendo del arduino trasero
{
s = Serial1.read();
S = S + s; // encadenamiento
if (s == '}') // para detectar el fin de la linea y dar un espacio
{
s = Serial1.read();
S = S + s;
http(S); // cuando sea el fin de la linea manda los datos
http("
"); // un salto de linea y borra para rescribir la siguiente linea
S = "";
i = 10;
}

y al terminar el esclavo pondrá en LOW su TX, y el maestro saldrá del while y posteriormente también su TX lo pondrá en LOW.

Para algunos podrá parecer innecesario pero me resolvió el problema, ya no recibía basura, no mantenía la recepción infinitamente y el sistema funcionaba correctamente.
Pero cuando lo volví a probar para mejorarlo, volvió a darme problemas de que de plano no manda nada se soluciono con un delay pero lo ase muuuy lento.

Gracias por la ayuda.

Surbyte ha escrito algo que no sabemos si esta hecho o no. Es super importante que tengas un cable que una los comunes entre placas.
Siempre, hay que unir las masas excepto las que pasan por optoacoplador.