2

I have written this little snippet of code to interface with EM408 GPS.

#include <SoftwareSerial.h>
SoftwareSerial GPS = SoftwareSerial(2,3);  //rx,tx
void setup()
{
  GPS.begin(4800);
  Serial.begin(9600);
}

void loop()
{
  //Serial.print(GPS.read(), BYTE);
  Serial.write(byte(GPS.read()));  //as of Arduino 1.0
}

Hardware side i have these connections:
ENABLE: 3.3V
Vcc : 3.3V
Ground: Ground
Rx, Tx correctly connected to arduino and correctly initialized with SoftwareSerial

However, the values i get are just junk data

ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

I get these without ending... I experimenting with changing the baud rate, still the same thing goes on. Any ideas?

EDIT:
I used to get random junk data before with the EM406 gps module, but i solved it by casting everything to BYTE. I have tried both approaches here, but the results are the same...

migrated from electronics.stackexchange.com May 19 '14 at 18:49

This question came from our site for electronics and electrical engineering professionals, students, and enthusiasts.

  • what about Serial.write((byte)(GPS.read()));? – Cornelius May 19 '14 at 18:37
  • just the same result.... – user1584421 May 19 '14 at 18:39
  • related: electronics.stackexchange.com/questions/110699/… – Nick Alexeev May 19 '14 at 18:48
  • 1
    The datasheet indicates that the communications port is "TTL Levels", which usually means that the data is inverted relative to normal RS-232 levels. If you are connecting to a true RS-232 port on the Arduino, you will need to invert the signals to/from the GPS module. – Peter Bennett May 19 '14 at 18:54
  • What Arduino model do you use? – jfpoilpret May 20 '14 at 5:04
2

The problem you get is that read() does not wait for a byte to be available, it just returns -1 if there is no byte available; converted as an unsigned byte that becomes 255.

In ISO-8859-1, which I guess is the encoding that your serial monitor is using, 255 translates to ÿ, so this is exactly what you observe.

Fixing this problem is straightforward, just check that a byte is available on SoftwareSerial before reading it:

void loop()
{
    if (GPS.available()) {
        Serial.write(byte(GPS.read()));  //as of Arduino 1.0
    }
}
  • Thanks, but when i use this method, i receive nothing at all, with all baud rates combination and independent of time passed... – user1584421 May 19 '14 at 19:42
  • If you receive nothing, that may come from your wiring: voltage level, crossed connections, short-circuit... – jfpoilpret May 19 '14 at 19:59
  • 1
    Note that in your current code, you don't receive either, as I have explained, if ÿ is the only thing you get, it means your GPS stream never receives anything... – jfpoilpret May 19 '14 at 20:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.