Problemas con comunicacion entre arduinos

Buenas verán estoy haciendo una comunicación con la librería Wire , y ya logre la comunicación hice varias pruebas con otros códigos y funciono pero mi problema es que con esta prueba que hice solo se ejecuta una vez el código y luego ya no me hace nada hasta que reinicie.

Receptor_multirespuestas_prueba.ino (1.6 KB)

Emisor_multirespuestas_prueba.ino (1.02 KB)

String no lo recomiendo para un funcionamiento confiable; por lo tanto esta es la manera alternativa de hacerlo:

// Wire Master Writer
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the 'Wire Slave Receiver' example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include <Wire.h>
const byte entrada1 = 24;
const byte entrada2 = 28;
const byte entrada3 = 32;
char buffer[4]; // El tamaño debe ser igual al número de entradas + 1

void setup() {
  pinMode(entrada1,INPUT);
  pinMode(entrada2,INPUT);
  pinMode(entrada3,INPUT);
  Wire.begin(); // join i2c bus (address optional for master)
}

void loop() {
  byte i = 0;

  if(digitalRead(entrada1))
      buffer[i++] = 'A';   
  else
      buffer[i++] = 'a'; 
  if(digitalRead(entrada2))
     buffer[i++] = 'B';
  else
     buffer[i++] = 'b';             
  if(digitalRead(entrada3))
     buffer[i++] = 'C';
  else
     buffer[i++] = 'c';

  buffer[i] = 0;
  Wire.beginTransmission(8); // transmit to device #8
  //Wire.write('se utilizo el comando ');
  Wire.print(buffer);
  Wire.endTransmission();    

}

PD: receptor ningún cambio en realidad; al vez aquí:

while (Wire.available()) {

Porque

while (1 < Wire.available())

Deja un caracter por fuera. Y ahora con el cambio en el emisor no se debe dejar ninguno por fuera.

¿Cual es la razon para esta afirmación?

Lucario448:
String no lo recomiendo para un funcionamiento confiable

¡Es porque la variable String hace uso de bastantes recursos!

StringCGE:
¿Cual es la razon para esta afirmación?
¡Es porque la variable String hace uso de bastantes recursos!

Algo así; sobre todo por el tema de que hay espacios de memoria que se asignan y liberan constantemente. Arduino no tiene recolector de basura y el manejo de memoria es algo rudimentario; por eso siempre quedo con la idea de que a la larga los objetos String cuelgan el programa por supuesta "falta de memoria" (siempre hay, el problema es cuando se fragmenta).

Ahora, perfectamente podría no ser la causa del problema; pero empezando por ahí se va descartando...