# Arduino: Delay of 1ms necessary between Serial.read and Serial.write?

We have a Razor IMU (10736) sensor board connected to a RS-485 Breakout board, talking RS485 to the computer via a USB-RS485 Serial Interface. We use the Arduino IDE to program Razor's on-board ATmega328 (code is based on the Razor AHRS open source firmware).

Everything works fine, but for one detail: The Arduino-programmed Razor seems to need a small delay between the reading-in and the writing-out of a serial message. The way it works, is: the computer polls the razor, the razor reads the request and then responds by reporting it's data. The code looks like this (simplified) :

if(Serial.available() > 0) {

int incoming = (int) Serial.read();    // read data
delay(1);                              // ??? why necessary ???
digitalWrite(RTS_PIN, HIGH);           // RE high, sets RS485-board to transmit
Serial.write(c);                       // send data
delay(1);
digitalWrite(RTS_PIN, LOW);            // RE low, sets RS485-board to receive

}


There is the need for a delay of minimum 1 millisecond between executing Serial.read() and any form of output (digitalWrite and/or Serial.write()). We tried setting the value lower into the microseconds range, but always got corrupted data packages as a result. This problem does not occur when you only poll the razor once in a while, but when you repeatedly poll it at short time intervals (the computer waits for a response and then automatically triggers a new polling). This all is happening at a baud rate of 76800 right now.

Next we did tests by programming the Razor's on-board ATmega328 directly with C code. And this eliminated the need for the delay value! Reading and writing serial data could happen right after each other. But - as we'd like to stay within the Arduino language (for several reasons) - we'd like to figure how we could solve this problem in other ways.

In the Arduino firmware, the Serial library, is there any reason why there would have to be a delay of 1ms between Serial input and Serial output? And if yes, are there ways of changing that?

• Can you look at the signals on an oscilloscope to ensure they are actually the exact baud rate you have the serial port configured for? – NickHalden Mar 26 '12 at 15:02
• Not at the moment. But i did try with different baud rates (9600, 57600, 76800) and the problem seemed consistent. – evsc Mar 26 '12 at 20:05
• Was the fix of directly coding in C also consistent across baud rates? – NickHalden Mar 27 '12 at 0:37