Conexión i2c entre arduinos

Buenos días, espero me puedan ayudar con mi proyecto. Necesitó conectar cinco arduino como esclavo y un maestro, cada esclavo tienen alrededor de cinco entradas digitales, necesito enviar el estado de esas cinco entradas digitales desde el esclavo al maestro pero estoy perdido con el código para que realice esta función.

Espero su ayuda

Muchas gracias

Usando que sistema de comunicación? I2C, SPI, RS485, Ethernet cableado o WIFI, o finalmente radio.
A que distancia estan los esclavos del maestro?

Es comunicación I2C. Aun no tengo cableado nada, la idea es poner cinco arduino como escalavos (una en cada maquina que deseo moniotorear) estos esclavos leeran el estado de funcionamiento atravez de entradas digitales (prendido o apagado) y se comuniquen con un maestro que recopile toda esa información y la muestre atravez de una web por ethernet.

Si tengo tres entradas digitales en un esclavo como seria la programación para enviar el estado de cada una de esas entradas al maestro? Ya use los ejemplos de la libreria wire para enviar una frase (char) de un arduino a otro por I2C, lo que no logro hacer es que el maestro le pida al esclavo el valor de las tres entradas entradas digitales por separado.

Intenta con esta guía
Como la encontre, en Google: Arduino I2C network

Gracias por la ayuda,el ejemplo que me das lo puedo hacer, ya que se envía solo un dato por cada esclavo. Lo que no logro hacer es enviar el dato de tres entradas digitales, adjunto una imagen para explicar un poco lo que quiero lograr

Junta las 3 entradas digitales mi amigo… 3 entradas son 3 bits
haces esto

a = digitalRead(Pin1);
b = digitalRead(Pin2);
c = digitalRead(Pin3);

valor = a+b<<1+c<<2;

a será el valor menos significativo
envías valor y tienes los 3 en un byte de 8 bits. O sea puedes enviar 8 entradas digitales.

Recuperas de este modo
lees valor en el master

a = valor & 0x01;
b = valor & 0x02;
c = valor & 0x04;

amigo no lo hice como tu me dices pero me dio la idea de como hacerlo y resulto, no se si sera la forma mas limpia, pero lo probe y funciona dejo los códigos por si a alguien le interesa.

MAESTRO

#include <Wire.h>

void setup() {
  Wire.begin();        
  Serial.begin(9600);  
}

void loop() {
  Wire.requestFrom(8, 3);    

  while (Wire.available()) { 
    char a,b,c;
    a= Wire.read(); 
    b= Wire.read();
    c= Wire.read();
    
    Serial.print("a   ");
    Serial.println(a);
    Serial.print("b   ");
    Serial.println(b);
    Serial.print("c   ");
    Serial.println(c);
  }

  delay(500);
}

ESCLAVO

boolean comp, bba, cut;
char a[3];

#include <Wire.h>

void setup() {
  Serial.begin(9600);
  Wire.begin(8);                
  Wire.onRequest(requestEvent); 
  pinMode(22,INPUT_PULLUP);
  pinMode(24,INPUT_PULLUP);
  pinMode(26,INPUT_PULLUP);
}

void loop() {
  comp=digitalRead(22);
  bba=digitalRead(24);
  cut=digitalRead(26);
  
  String input=(String(comp)+String(bba)+String(cut)); 
  input.toCharArray(a,4);
  
  Serial.print("String= ");
  Serial.println(input);
  Serial.print("char= ");
  Serial.println(a);
  
  delay(100);
}


void requestEvent() {
  
  Wire.write(a); 
}

Moderador: Edicion de etiquetas de código