Comunicación de dos arduinos RX TX

Buenas tardes!

Estoy intentando comunicar dos arduinos de forma que uno esté continuamente pasando un valor al otro, la idea es que sea la lectura de un sensor. Y que el otro la reciba.

El arduino que manda los datos ejecuta el siguiente código:

int numero = 100; // contador

void setup() {

Serial.begin(57600); // Velocidad de la transmisión y apertura del puerto
}
void loop() {

Serial.print(numero);
numero++;
delay(100);

}

El que recibe los datos compila, lo siguiente:

int datoserial = 0; // variable para guardar el dato que se envía
int redPin = 13;
void setup() {

pinMode(redPin, OUTPUT);
Serial.begin(57600); // Velocidad de la transmisión y apertura del puerto
}

void loop() {
digitalWrite (redPin, LOW); // Apaga el Led conectado al pin 13
datoserial = Serial.read(); // guardamos el valor en la variable

if (datoserial == 107){
digitalWrite(redPin, HIGH); // Enciende el Led conectado al pin 13

}

}

}

Tengo conectado el Tx con Rx y las masas en común.

El problema es que cuando recibo datos los guarda de uno en uno,
¿cómo podría hacer para que reciba un 100 y el arduino que lo recibe guarde un 100 en vez de un 1 luego un 0 y 0.

Muchas gracias.

if (Serial.available()) {
datoserial=Serial.parseInt();
if (datoserial == 107)
etcétera.
}

Y usa los tags para insertar códigos por favor!!

Noter muchisimas gracias y siento lo de los tags pero esque soy nuevo en el foro :sweat_smile: :sweat_smile:

Si quiero pasar dos datos, lo que he pensado es en separarlos por un valor (0 y 1) pero no sé como hacer la lectura correcta, tengo este código pero no me almacena bien los datos por separados.

En relación al arduino que pasa los valores:

int numero1 = 100; // contador
int numero2 = 999;
void setup() {

Serial.begin(57600); // Velocidad de la transmisión y apertura del puerto
}
void loop() {

Serial.println(numero1); 
numero1++;
Serial.println("0");
Serial.println(numero2);
numero2++;
Serial.println("1");
delay(100);

}

El arduino que hace la lectura:

int datoserial1 = 10; // variable para guardar el dato que se envía
int datoserial2=10;
int dato=0;
void setup() {

Serial.begin(57600); // Velocidad de la transmisión y apertura del puerto
}

void loop() {

if (Serial.available()) {
    dato=Serial.parseInt();
    if(dato==1) {
      datoserial1=Serial.parseInt();
    }
    if(dato==0) {
      datoserial2=Serial.parseInt();
    }

Serial.println(datoserial1);
Serial.println(datoserial2);
}
}

Muchisimas gracias!

Para separar datos numéricos no utilices un número. Separa con comas, por ejemplo y parseInt leerá el número hasta encontrar la coma.

Si los valores que quiero que se pase entre un arduino y otro son dos valores de dos sensores que van con decimales; ¿cómo puedo hacer para que se reciban bien?

el decimal va con puntos decimales, no con comas
Ahh ahora comprendo, estas pasando enteros.
Si tiene decimales, entonces haz esto, define cuantos decimales envias, supongamos 1.
Entonces multiplicas por 10 y truncas el número flotante.
Supongamos 34.5 es la temperatura a enviar.
Multiplcas por 10, queda 345. Eso es lo que envias, del otro lado recibirás 345 que divides para recuperar el dato correcto.
si fuera 37.0 grados o 37 a secas igual lo multiplicas por 10 y envias 370 y luego decodificas de algún modo en 37 nuevamente.
Muy facil.

NOTA: todo esto porque estas usando datoserial1=Serial.parseInt(); para decodificar los datos recibidos por el serial.

De acuerdo muchas gracias,

La última duda que tengo es si estoy pasando dos valores de dos sensores distintos para recibirlos y poder identificarlos correctamente simplemente con poner comas entre ellos es bastante? o sería recomendable poner algo más para que identifique primero de que sensor se trata, lo que tengo compilado es:

 if (Serial.available()){
    pH=Serial.parseInt();
    EC=Serial.parseInt();
  valorpH = float(pH)/100.0;
  valorEC = float(EC)/100.0;
  Serial.println("Valor de ph");
  Serial.println(valorpH);
  Serial.println("Valor de EC");
  Serial.println(valorEC);
 }

Y el que manda los datos;

  Serial.print(sensorpH);
  Serial.print(",");
   float resistanceEC = OpenAquarium.readResistanceEC(); //EC Value in resistance
  float EC = OpenAquarium.ECConversion(resistanceEC); //EC Value in µS/cm
  int sensorEC=EC*100; //*100 para quitar los decimales
  Serial.print(sensorEC);
  Serial.print(",");
 }

Saludos
Si envías dos o mas datos de sensores solo tienes que separar con comas, y en el arduino que recibes colocas algo como

Sensor_1= Serial.parseInt();
Sensot_2= Serial.parseInt();

Tal como lo colocastes.Y para evitar retardos innecesarios

Enviar de esta forma
Serial.print(Sensor_1);
Serial.print(",");
Serial.print(Sensor_2);
Serial.print(",");

Y no enviando uno y luego calculando otro para enviarlo.

Pregunto ya que recibes por serial despues escribes por el puerto nuevamente hacia abdonde escribes? Al primer arduino?l

De acuerdo, muchas gracias!!
No jaja recibo y luego simplemente he puesto un serial.print para ver si los datos llegaban correctos

Feliz Navidad

hola como va?...
yo estuve intentando tambien separar los valores que me llegan y guardarlos en distintas variables, pero no hay caso solo lee los valores juntos por ejemplo - 65,45, - y y lo que necesito es poner en una variable 65 y en otra 45. alguien me puede dar una mano ?? ya se me seco el cerebro..

asi codifique el receptor :

if (Serial.available()){
ser1=rss.parseInt();
ser2=Serial.parseInt();
Serial.println("el valor es..");
Serial.println(ser1);

}

pero en el monitor me muestra 65,45, y no lo separa.

Hilo del 2014, quien esperas que te vaya a responder.
Segundo hilo que revives y ya te advertí que no lo hagas.
Por favor leer las normas del foro.