Reading Handheld GPS NMEA using Arduino Uno

Hi, I’m new to the forum but have searched my question but couldn’t get useful info, so here goes.

I’m trying to connect the RS232 output from my handheld Garmin 60CSx unit to the Arduino Uno. It displays NMEA data just fine when connected through an RS232 → USB cable on Hyperterminal, so I know the GPS is receiving satelite info and transmitting at 4800baud to the PC.

My connections are as follows:
RS232 Side Arduino Side
Pin 2 (TX) Pin 0 (RX)
Pin 5 (GND) Pin GND

Using the following code:
#include <string.h>
#include <ctype.h>

// Variables
int RXpin = 0;
int TXpin = 1;
byte IncomingByte;

// Setup
void setup()
// Set Pins Up:

// Initialise Serial Communication:


// Program
void loop()

// Read Incoming Byte:
if (Serial.available() > 0)
IncomingByte =;
Serial.print(IncomingByte, BYTE);


I get nothing but garbage on the serial monitor: i.e. ??§?§?§??§???§??§?§?§??§?§?§§??§??«?åë·q_qYS§?§?§?§?§?§???§?§?§?§??§??§
What am I doing wrong?

What am I doing wrong?

You're connecting an RS232 device to a TTL input?
I doubt you've damaged anything, but you may wish to consider getting a MAX232 or similar

The Arduino is on one end of the serial port. You appear to have the GPS and the Serial Monitor on the other end of the serial port. That won't work. You can only have one device on each end of a serial port.

You could use NewSoftSerial and a pair of digital pins to talk to the GPS and Serial to talk to the PC.

Below are some simple ways to invert the GPS rs232 ouput to ttl levels
for the arduino.

have you got the same problem yet ?