5

I want to write an Arduino program that simply recieves a string (via the I2C wire library) from a master Arduino, then waits for a request, and sends that string back.

Here is my code:

#include <Wire.h>

void setup()
{
  Wire.begin(4); 
  Wire.onReceive(receiveEvent); 
  Wire.onRequest(requestEvent);
}

String data = "";

void loop()
{

}

void receiveEvent(int howMany)
{
  data = "";
  while( Wire.available()){
    data += (char)Wire.read();
  }
}

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

I read in the API that the write() function accepts a string, but I keep getting a "No matching function for call" error. I tried to simply replace

Wire.write(data);

with

Wire.write("test");

and that worked without error. Why is this the case?

Hoytman
  • 747
  • 5
  • 13
  • 26

1 Answers1

12

data is a String. "test" is a char*. Wire.write() has no prototype that takes a String.

Wire.write(data.c_str());
Ignacio Vazquez-Abrams
  • 17,663
  • 1
  • 27
  • 32