Pages: [1]   Go Down
Author Topic: Multiples lecturas I2C Arduino  (Read 1053 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas.

Ante nada me presento. Llevo bastante tiempo leyendo pero nunca he tenido que participar, puesto que muchas de mis dudas se han visto resueltas en la web, pero en este caso no es así.
Llevo tiempo con arduino, aproximadamente año y medio y ahora estoy empezando a hacer cosas "mas serias".

En concreto el problema es el siguiente:

Dispongo de dos arduinos, uno como maestro y otro esclavo, el cual tiene conectados 3 sensores.
Necesito leer los tres sensores y almacenarlos en 3 variables del maestro.
Lectura del maestro:
Code:
  Wire.requestFrom(0x44,2);
 while(Wire.available())
 { 
  temp = Wire.read();
  temp2 = Wire.read();
  }

Con este código en las dos variables me inserta la misma lectura.

El código del esclavo es este:
Code:
void enviaDatos()

  Wire.write(temperaturaC);
  delay(200);
  Wire.write(sensor2);
  delay(200); 
}

¿Alguien sabría como enviar y recibir multiples datos?


Un saludo y gracias de antemano.
Logged

Offline Offline
Sr. Member
****
Karma: 9
Posts: 252
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, no soy experto, pero he visto en algunos videos que hacen algo así

Primero envía los datos así:

  Wire.write(temperaturaC);
  Wire.write("-");
  Wire.write(sensor2);
  Wire.write(".");
  delay(500); 

Y para leerla...

  data = Wire.readStringUntil('.'); //Esto no se si funciona, en este ejemplo usaban port (Sino obvialo este paso y el siguiente
  data = data.substring(0, data.length() - 1); //Esto sería para borrarle ese punto final, si igual te lee hasta ahí, no envías el punto y listo smiley
 
Si no usas lo de arriba, iria simplemente esto

data = Wire.read();

  // Buscamos dónde está el -
  index = data.indexOf("-"); //Esto nos da la posición del -
  // buscamos temperaturaC
  temperaturaC = data.substring(0, index); //Nos quedamos con los datos desde el inicio hasta el guion
  // buscamos sensor2
  sensor2 = data.substring(index+1, data.length()); //Nos salteamos el guión y leemos hasta el final

PD: No tengo como probarlo, confirmame si te sirvió o al menos si orienté hacia alguna solución smiley-razz

PD: Aunque si sabes ingles (y sino también), te invito a que veas el canal de este Genio, hace cosas muy buenas y muy bien explicadas.
En este video video ví el código que te comento, quizás en otros hace lo que buscas más específicamente.




Logged

My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Offline Offline
Jr. Member
**
Karma: 3
Posts: 88
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hazlo así, a ver si funciona

Code:
Wire.requestFrom(0x44,2);
 while(!Wire.available())
 {  
  //No hace nada, espera dato
 }
  temp = Wire.read();
  temp2 = Wire.read();
  .......
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas.

Siendo novato pienso que en la rutina   Wire.onRequest(enviaDatos); deberías concatenar en un array los dos datos (temperaturaC y sensor2) para solo hacer una llamada a la funcion Wire.write del tipo Wire.write(array,2); luego con el maestro ya juegas con el dato.

Si pruebas a envíar 3 bytes con Wire.write y te funciona házmelo saber smiley-wink

Un saludo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hazlo así, a ver si funciona

Code:
Wire.requestFrom(0x44,2);
 while(!Wire.available())
 {  
  //No hace nada, espera dato
 }
  temp = Wire.read();
  temp2 = Wire.read();
  .......

Pues no funciona.
Al final lo he solucionado enviando un dato "detonador" y almacenando la respuesta de la siguiente forma:

Code:
Wire.beginTransmission(dirección);
 Wire.write('dato');
 recibeDatos(); // recibe los datos
  Wire.endTransmission(dirección);


void recibeDatos()
{
   Wire.requestFrom(dirección,bytes);
 while(Wire.available())
 { 
 dato = Wire.read();   
  } 
delay(100);
}


Gracias a todos por la ayuda
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo he querido trabajar lo mismo pero no me sale, quiero recibir los datos de un arduino esclavo que tiene conectado tres sensores. Primero el maestro envia el numero de sensor y dependiendo del número el esclavo debe enviar el valor... pero el maestro simplemente recibe un 3... no se que onda... ayuda!!!
Primero esta el esclavo y luego el maestro

* ESCL4.ino (0.92 KB - downloaded 12 times.)
* MAES4.ino (1.71 KB - downloaded 12 times.)
Logged

Pages: [1]   Go Up
Jump to: