Wire.read returning constant stream of data

GolamMostafa:
Your codes should be like:

char data = 0;

#define led 3
#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  pinMode(led, OUTPUT);
 
}
void loop()
{
  if(Serial.available() > 0)      // Send data only when you receive data:
    {
      data = Serial.read();
      Serial.print(data);
      Serial.print("\n");     
      digitalWrite(led, HIGH); // flash LED when BT command received
      delay(150);
      digitalWrite(led, LOW);
      Wire.beginTransmission(20);//SlaveAddress(A4); // SDA on Mega
      Wire.write(data);
    // Wire.endTransmission();
      byte x = Wire.endTransmission();
      if (x != 0x00)
      {
        Serial.print("Transmission Problem...!");
        while(1); //wait for ever
      }
      Serial.println("Good Transmission.");//x, DEC);
    }

}




**And:**


#include <Wire.h>
#define lights 4
volatile bool flag1 = false;
int data;

void setup()
{
  Wire.begin(20); // SDA
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
}

void receiveEvent(int bytes)
{
  //data = Wire.read();
  flag1 = true;//Serial.print(data);  //never ever issue print() command in this interrupt handler
}

void loop()
{
    if(flag1 == true)
    {
        data = Wire.read();
        if (data == 1)
      {
          analogWrite(lights,255);
          Serial.println(data);
          flag1 = false;
      }
      else
      {
          flag1 = false;
      }
    }
}

Just tried it and it still doesn't work. In fact, upon booting the Nano, it will only read the first command and nothing more. I send it the digit 1, it Serial.println's a 1, then prints "Transmission Problem..." as your code states. Then it never prints another digit or flashes the LED until I reboot it, but the LED on the actual BT module itself flashes as if it received a digit. As for the Mega, it still doesn't recognize anything.