Lifi synchronisation with Mega and Nano

Hello,

i was trying to synch my Arduinos for measuring applications. You can see the schematic in the attachments.

Here's the code from the Mega:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(1200);
  Serial1.begin(1200);
}

bool start = false;
char StartSignal = '\0';
char c = '\0';
byte go = 0b00000000;
byte ResetArduino = 0b00000000;
char RESARD = '\0';

void loop(){
  while (start == false)
  {
    StartSignal = Serial.read();
    if (StartSignal  == '1')
    {
      //StartSignal = '\0';
      start = true;
      Serial1.println('L');
    }
  }
  while (start == true)
  {
    if (Serial1.available())
    {
      go = Serial1.read();    
      c = go;
      go = 0b00000000;
      
      if (c == 'L')
      {
        c = '\0';
  
        //dosomestuff
        
        Serial.println('L');
        Serial1.println('Z');
        
      }
      else if (c == 'Z')
      {
        c = '\0';
        
        //dosomestuff
        
        Serial.println('Z');
        Serial1.println('L');
      }
    }
  if (Serial.available())                       
    {
      ResetArduino = Serial.read();
      RESARD = ResetArduino;
      if (RESARD = '!')
      {
        //RESARD = '\0';
        EmptyBuffer();
        asm volatile ("  jmp 0");
      }
      else{}
    }
  } 
}

and this is the code from the Nano:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(1200);
}

byte c = 0b00000000;
char arr = '\0';

void loop() {
  // put your main code here, to run repeatedly:
 
      if (Serial.available())
      {
        c = Serial.read();
        arr = c;
        c = 0b00000000;
  
        if (arr == 'L')
        {
          arr = '\0';
          Serial.println('L');
        }
        else if (arr == 'Z')
        {
          arr = '\0';
          Serial.println('Z');
        }
        
     }
}

the idea of the code is to start the measurement with a '1' send to the mega and stop it with a '!'. yes i know that
Code: [Select]
asm volatile (" jmp 0");

isn't pretty but it works for me.

now, my problem is that i expect to recieve L and Z alternating. It works sometimes, but often i recieve two 'L' or 'Z' and i cant explain myself why this is happening. If i stop and restart the sketch with a '!' and a '1' and repeat it multiple times, i will recieve L's and Z's alternating but as long as I recieve two of each it means the Arduinos aren't perfectly synchronized.

Output looks like this:
(perfect synch)
L
Z
L
Z
L
Z
...

(not perfect)
L
L
Z
Z
L
L
Z
Z
...

Does anyone has an idea why this happens?

Moderator edit: image embedded in post