UART vs Tx/Rx vs Serial.print vs SoftwareSerial

I just need confirmation of my grasp of serial comm on an Arduino Uno. Is this correct:

  1. There's only one hardware serial on an Uno: UART and Tx/Rx pins are the same
  2. When I send a compiled sketch from the IDE, it goes into the Uno through UART
  3. If Tx/Rx pins are hooked up for serial comm with some other hardware, when I'm uploading a sketch, this is replicated on the Tx/Rx pins. This MAY cause trouble with "some other hardware", so it's better to disconnect Tx/Rx during an upload.
  4. If in the sketch I write something to "Serial", I'm writing to Tx/Rx pins
  5. The Serial Monitor in the IDE shows what's on the hardware serial. If the sketch communicates via Tx/Rx the Serial Monitor in the IDE will show this.
  6. SoftwareSerial can be used if more serial ports are needed. SoftwareSerial can be used at the same time as hardware serial (no need to begin/end communication)
  7. Two SoftwareSerials cannot be used at the same time. They have to alternate (begin/end communication)

That seems all correct.

WRT 7: I think you can have multiple SoftwareSerial ports, but only one can transmit or receive at a time. So you don't need to continually begin/end multiple ports, but if you're doing a Serial.read() on one SS port, anything sent to another SS port will be lost.

1 Like

OK, thanks. So when using 2 soft serials, I need to verify that the comm on one soft serial has ended, before proceeding, yes?

while (...) {
    SoftSerial1.read(...);
    // make sure we're done
}
SoftSerial2.write(...);