Serial communication problems between Mega and RS485 device

A few things:

  1. Leave the receiver enabled when you are not transmitting. Enable in setup, then disable it for transmit and reenable. Don't mess with it when reading data.

  2. Don't use delay when transmitting. You can use Serial1.flush() to make sure the character has been fully transmitted.

  3. Don't use delay ever. Up to 10 characters could have arrived in those 10ms of delay. After receiving 7 characters, you will have delayed 70ms. That is enough time to overflow the 64-byte input buffer, and you will start losing characters.

void loop()
{
  digitalWrite(Pin13LED, HIGH);  // Show activity
  if (Serial.available()) {
    dataSend = Serial.read();
    digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit

    Serial1.write(dataSend);   // Send byte to Motor Driver
//    Serial1.write('\r');
    Serial1.flush();

    digitalWrite(SSerialTxControl, RS485Receive);  // Disable RS485 Transmit
    digitalWrite(Pin13LED, LOW);  // Show activity
  }

  digitalWrite(ledPin, HIGH);
  if (Serial1.available()){
    dataReceived = Serial1.read();
    Serial.println(dataReceived);
    digitalWrite(ledPin, LOW); // Show activity (look quickly!  :-/)
  }
}