Making Two Arduinos Talk

Hello people! I have a problem regarding serial communication between arduinos. I want to control servo motors from the receiving end and then get data from nunchuck from the transmitting end. Prior to this, I successfully controlled LED from RX end with a pushbutton at TX end. But now, I'm sending multiple bytes of data.

here is the TX code:

void sendData()
{
  int y = 0;
  for(int x=0; x<11; x+=2)
  {
    serial_data[x] = (unsigned char)readings[y];
    Serial.write(serial_data[x]);
    serial_data[x+1] = (unsigned char)(readings[y] >> 8);
    Serial.write(serial_data[x+1]);
    y++;
  }
}

here is RX code:

void setup()
{
  Serial.begin(9600);
  servo.attach(12);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  for(int j=0; j<=6; j++) {
   inData[j] = 0;
   lastIn[j] = 0;
  }
  delay(1000);
}

void loop()
{
  receiveData();
  processMotors();
  delay(10);
}

void receiveData()
{
  int x = 0;
  while( x < 6 )
  {
    if(Serial.available() > 0)
    {
      inData[x] = Serial.read();
      inData[x] = (inData[x] << 8) + Serial.read();
      x++;
    }
  }
}

void processMotors()
{
  if( inData[4] != lastIn[4] )
  {
    if( inData[4] == 1 )
     digitalWrite(ledPin, HIGH);
    else
     digitalWrite(ledPin, LOW);
     
     lastIn[4] = inData[4];
  }
  
  if( inData[5] != lastIn[5] )
  { 
    if( inData[5] == 1 )
     digitalWrite(ledPin0, HIGH);
    else
     digitalWrite(ledPin0, LOW);
  }
}

what I get when pressing Z button is the LED for C button blink fast

The second read in receiveData() may fail. You need to check that enough bytes are ready before reading I think.

if (Serial.available() >= 2)

if (Serial.available() >= 2)

Nothing really improved just made the blink faster.

I made some corrections in sendData() (but it still doesn't solve the problem) here's the updated one:

void sendData()
{
  for(int y=0; y<6; y++)
  {
    serial_dataH = (unsigned char)(readings[y] >> 8);
    serial_dataL = (unsigned char)readings[y];
    Serial.write(serial_dataH);    
    Serial.write(serial_dataL);
    y++;
  }
}

I wonder what order is serial data sent and received

Ok, I've worked it out now. Here's the updated code for those encountering the same problem:

void sendData()
{
  int x=0;
  for(int y=0; y<=7; y+=2)
  {
    serial_data[y] = (unsigned char)(readings[x] >> 8);
    serial_data[y+1] = (unsigned char)readings[x];
    x++;
  }
  serial_data[8] = readings[4];
  serial_data[9] = readings[5];
  
  for(x=0;x<=9;x++)
    Serial.write(serial_data[x]);
}
void receiveData()
{
  int x = 0;
  int y = 0;
  if( Serial.available() >= 10 )
  {
    for(x=0;x<=9;x++)
      inData[x] = Serial.read();
      
    for(x=0;x<=7;x+=2) {
      controlData[y] = (inData[x] << 8) + inData[x+1];
      y++;
    }
    controlData[4] = inData[8];
    controlData[5] = inData[9];
  }
  
  if(x != 0) processMotors();
}