Your code seems to be confused: if you just want to send data from the Master to the Slave, look at the Wire.h example:
Master:
#include <Wire.h>
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
}
byte x = 0;
void loop()
{
Wire.beginTransmission(8); // transmit to device #8
Wire.write("x is "); // sends five bytes
Wire.write(x); // sends one byte
Wire.endTransmission(); // stop transmitting
x++;
delay(500);
}
Slave:
#include <Wire.h>
void setup()
{
Wire.begin(8); // join i2c bus with address #8
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}
void loop()
{
delay(100);
}
// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
while (1 < Wire.available()) // loop through all but the last
{
char c = Wire.read(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.read(); // receive byte as an integer
Serial.println(x); // print the integer
}
If you want to send and receive String:
Master
#include <Wire.h>
#define I2CAddress 9
String text;
void getText(){
if(Serial.available()) // check if we send a message
{
while(Serial.available())
{
char c = Serial.read(); // read the next character.
text += c;
delay(10);
}
}
}
void sendText() {
Wire.beginTransmission(I2CAddress); // transmit to device #9
for(int i=0; i<(text.length()); i++){
Wire.write(text[i]);
}
Wire.endTransmission(); // stop transmitting
}
void setup() {
Serial.begin(9600);
Serial.println("Master here");
// Start the I2C Bus as Master
Wire.begin();
}
void loop() {
text = "";
while(text.length() == 0) { // Until we send text in the serial monitor
getText();
}
if(text.length() > 0) {
Serial.print("Send: " + text);
sendText();
}
delay(500);
}
Slave:
#include <Wire.h>
#define I2CAddress 9
#define ledPin 13
void receiveString(int bytes) {
String text = "";
while (Wire.available()) {
char c = Wire.read(); // receive a byte as character
text += c;
}
Serial.print("Printing: ");
Serial.println(text);
manageLed(text);
}
void manageLed(String cmd) {
if(cmd == "ON")
digitalWrite(ledPin,HIGH);
else if(cmd == "OFF")
digitalWrite(ledPin,LOW);
else
Serial.println("Unknown command: " + cmd);
}
void setup() {
Serial.begin(9600);
Serial.println("Slave here");
// Start the I2C Bus as Slave on address 9
Wire.begin(I2CAddress);
// Attach a function to trigger when something is received.
Wire.onReceive(receiveString);
// LED
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,LOW);
}
void loop() {
delay(10);
}
PS: I didn't try the code on 2 arduinos