Here I have an arduino mega (Master) and an Uno (Slave). Both of them are connected to my laptop over USB ports. I would like to turn on the LED on arduino Uno when I write the "ON" on the adruino mega's Serial monitor which I have on my laptop's screen. unfortunately it doesn't work. ![]()
I would be grateful if you let me know how can I solve this problem. ![]()
here's the Master code which is connected to both I2C and serial ports. ![]()
#include <Wire.h>
String Input_data_String = "";
char Input_data_string[5];
const int ledPin =13;
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial) {
}
}
void loop() {
delay(10);
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
Input_data_String += inChar;
if (Contains(Input_data_String ,"Read")){
Input_data_String.toCharArray(Input_data_string,5);
//Serial.println ("Message from Arduino");
Wire.beginTransmission(2); // transmit to device #2
Wire.write(Input_data_string); // sends String
Wire.endTransmission(); // stop transmitting
Input_data_String ="";}
if (Contains(Input_data_String ,"ON")){
Input_data_String.toCharArray(Input_data_string,5);
//Serial.println ("Message from Arduino");
Wire.beginTransmission(2); // transmit to device #2
Wire.write(Input_data_string); // sends String
Wire.endTransmission(); // stop transmitting
Input_data_String ="";}
if (Contains(Input_data_String ,"OFF")){
Input_data_String.toCharArray(Input_data_string,5);
//Serial.println ("Message from Arduino");
Wire.beginTransmission(2); // transmit to device #2
Wire.write(Input_data_string); // sends String
Wire.endTransmission(); // stop transmitting
Input_data_String ="";}
}
}
bool Contains( String s, String search) {
int max = s.length() - search.length();
for (int i=0; i<= max; i++)
{
if (s.substring(i) == search) return true; // or i
}
return false; //or -1
}
And here's my slave code which is connected via I2C to the master.
#include <Wire.h>
String Data = "";
char data[5];
void setup() {
Wire.begin(2);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
}
void loop() {
delay(100);
}
void receiveEvent(int howMany) {
while( Wire.available()){
delay(500);
Data += (char)Wire.read();
}
if (Data == "ON"){
digitalWrite(13, HIGH);
Data="";}
digitalWrite(13,LOW);
if (Data == "OFF"){
digitalWrite(13, LOW);
Data="";}
}