Amigos del foro, estoy intentando comunicar 2 arduinos conectados a una celda de carga por el puerto i2c, pero tengo un problema al recibir el dato de peso que me envia el esclavo, pues no puedo visualizar correctamente el dato en el maestro(solo recibo 255.00 y de allí no se mueve mas el dato) , ya que el maestro tiene que sumar su peso mas el dato de peso recibido del esclavo.
Esto es lo que recibo en el monitor serial:
Solo se mueve el dato de peso del maestro pero el dato del esclavo se queda estatico y me muestra 255.00
255.00+1.882 = 256.898
255.00+1.844 = 256.859
255.00+1.854 = 256.847
255.00+1.834 = 256.852
255.00+1.765 = 256.802
Este es el código del maestro
#include <Wire.h>
#include "HX711.h"
#define DOUT A1
#define CLK A0
HX711 balanza(DOUT, CLK);
float datoEsclavo;
float result;
void setup()
{
Wire.begin(); //Iniciamos el bus I2C
Serial.begin(9600); //Iniciamos el Serial
balanza.set_scale(380492.5); // Establecemos la escala
balanza.tare(10); //destarando
}
void loop()
{
Wire.beginTransmission(0xF5); // Enviamos a la dirección 0xF5 en binario 111 0101
Wire.write(1); //Enviamos un 1
Wire.endTransmission(); //Terminamos la trama
Wire.requestFrom(0xF5, 6); // Pedimos 12 bytes al slave 0xf5// NO SE SI ESTAR BIEN PEDIR 12 BITS YA QUE EL PESO TIENDE A VARIAR HASTA 6 DIGITOS
while(Wire.available()) // Mientras tengamos datos.
{
datoEsclavo = Wire.read(); // Leemos el resultado
}
result = datoEsclavo + balanza.get_units(1); //Sumamos los pesos y mostramos los resultados en el monitor
Serial.print(datoEsclavo);
Serial.print("+");
Serial.print(balanza.get_units(1),3);
Serial.print( " = ");
Serial.println(result,(3));
Serial.println();
}
Y este es el codigo del esclavo
#include <Wire.h>
#include "HX711.h"
#define DOUT A1
#define CLK A0
HX711 balanza(DOUT, CLK);
boolean datoRecibido;
void setup()
{
Wire.begin(0xF5); // Address 0xf5
Wire.onRequest(requestEvent); // Activamos evento de peticion
Wire.onReceive(receiveEvent);//Activamos evento de lectura.
balanza.set_scale(386666.75); // Establecemos la escala
balanza.tare(10); //Destarando
}
void loop()
{
delay(100);
}
//Evento de peticion se activa cuando un master nos pide que le enviemos algun dato
void requestEvent()
{
if( datoRecibido = true){
Wire.write((balanza.get_units(1),3)); // Enviamos el resultado del calculo
}
datoRecibido=false;
}
void receiveEvent(int recepcion)
{
unsigned int pedido;
while( Wire.available()) //Leemos hasta que no haya datos.
{
pedido = Wire.read(); //Leemos
if (pedido = 1)
datoRecibido = true;
}
}