Using RX/TX as digital IO...

I read the FAQ, but what exactly goes wrong if I’m out of IO pins and I really want to use “0” and “1” (RX/TX) as digital IO?

Obviously, if I use them for digital outputs then the communication link with the USB port is going to go down and I can’t use any other serial device on those pins. Right?

I’m assuming that those pins are going to “flicker randomly” to my external hardware if I have the unit plugged in to the USB port for programming? So I need to make sure that they are used for something that will not cause problem. E.g. I could use them as data lines on an 44780 LCD, since nothing is going to happen unless the /E line on the LCD is pulsed.

Anything else I’m missing? Has anyone actually used those lines as IO?

I wouldn't mess with those two lines unless I had the ATMEGA chip standing alone without the USB TTL chip (FTDI).

Tell us what you're trying to do and how you're running out of IOs.

Running a set of stepper motors and an LCD panel and switches. Stand alone 3 axis motion controller.

I'm hoping to use those pins as outputs from the Arduino, so my circuitry will not be driving the pins.

Is there no resistor or other current limiter between the ATMEGA and the FTDI chip on the pin it drives? I can't imagine they would have designed it in such a way that the uC accidentally driving the same pin the FTDI chip is driving would cause damage... I certainly understand that it would interfere with communications, but I won't be communicating with the PC after the program is loaded and the code is running.

And I'll have the LCD panel for debugging messages if needed.

Both Rx and Tx have 1k resistors between the 328 and the FTDI chip, these should stop any damage but in general it's best to leave them alone. Maybe use a shift reg or MUX to get some extra IO from the other pins.

Are you already using the LCD in 4-bit mode? If so use a serial LCD.


The main problem is that when you upload stuff external circuitry connected to the line will:- 1) Go up and down. 2) Possibly override the signals from the serial port. The best bet is if you arrange to switch out the external circuitry whne you upload to the board like in this project:-

Thanks Mike! That really helps.

I think if one was careful with the choice of signal, it might be possible to share lines without overlap, but I’ll add an option to disconnect just to be safe.