Hola gente, quiero conectar dos arduino , el uno como master y un nano como esclavo , la parte de conexión fue todo bien , el problema es con el programa, como soy muy novato estoy probando con el ejemplo de master - slave , el problema es que cuando cargo los programas en el serial solo me aparece el primer caracter de lo que me responde el esclavo. Pongo el codigo del ejemplo haber si me pueden dar una mano.
para el master
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Wire.requestFrom(8, 6);
while (Wire.available()) {
char c = Wire.read();
Serial.print(c);
}
delay(500);
}
para el esclavo
#include <Wire.h>
void setup() {
Wire.begin(8);
Wire.onRequest(requestEvent);
}
void loop() {
delay(100);
}
void requestEvent() {
Wire.write("12 ");
En el serial del master no me aparece el "12" si no solo el "1"
Buenas, con Wire.requestFrom(8, 6); le haces una petición al esclavo nº 8 de 6 bytes y después en el esclavo solo le mandas 3 bytes "12 ", tal vez sea eso, de todas formas no tengo mucha idea del manejo de esta librería, pero quizás te ayude. Yo probaría a poner 6 bytes en el Wire.write o poner un 3 en el Wire.requestFrom.
También podria ser que necesitases un flush en el esclavo para forzar la escritura de buffer, pero ya te digo que no sé, no he probado.
Saludos,
gracias, ya lo solucione , ahora siguiendo el ejemplo , tengo en el esclavo conectado 3 sensores un dht22 , un sensor de lluvia y un sensor de humedad de tierra , y quiero enviarle los datos al maestro , tengo qe hacer un requestFrom y una variable para cada sensor ??, o dentro del mismo requestfrom creo las 3 variables para cada sensor ??
Por como funciona I2C, mejor haz las mediciones en la función onRequest. El problema es que la cantidad de bytes a enviar debe ser constante; por lo tanto te sugiero enviar los datos en forma binaria.
La cantidad de sensores es constante, por consiguiente es posible enviar la misma cantidad de bytes sin importar su valor; algo que no ocurre al convertirlo a texto ya que la longitud depende de la cantidad de dígitos de cada valor.