Reading NMEA strings

Hello,

So for the past few days now I have been trying to read NMEA 2000 strings on my arduino UNO. I know that NMEA 2000 is RS422 so I am using Sparkfun's conversion board to convert this to UART and communicate through a software serial port.

I am using a Lowrance Point-1 GPS.

Sparkfun part: SparkFun Transceiver Breakout - RS-485 - BOB-10124 - SparkFun Electronics

Here is my code:

#include <SoftwareSerial.h>
//#include <nmea.h>
SoftwareSerial serGPS(10, 11); //rx, tx
void setup() {
  serGPS.begin(19200); // GPS serial
  Serial.begin(9600);  // USB serial
}
void loop() {
  if (serGPS.available()>0) { // check for GPS data
    Serial.println(serGPS.read()); // print the incoming data to the laptop screen
  }
}

I know that the baud rate is probably incorrect but I dont think that is my issue (I could be wrong).

Just to be clear: I AM NOT ASKING HOW TO PARSE GPS DATA!!!!!! almost every forum post I have read describes how to parse the data with something like TinyGPS. This is not what I want. I just want to see the RAW nmea strings on my laptop serial monitor!

So the output I am getting is just a series of numbers. If I change the baud rate for the GPS the numbers change to some other value between 0 and 255 (so i guess its reading voltage?)

I am also confident it is wired together properly.

If someone could give me advice on what I may be doing wrong it would be appreciated. Thank you.

"I know that the baud rate is probably incorrect "
That will lead to badly misinterpreted data as the data bits are sampled at totally incorrect times after the start bit is sensed. Fix that first.

Serial.println((char)serGPS.read());

I can't tell what speeds are used with NMEA 2000. Maybe Wikipedia says, but I can't access that here.

You can do a test easy enough by connecting your buffer to the Arduino RX only and then use the Serial monitor to print out what is received, and work your way through a bunch of speeds. That will be a more reliable test than trying to use software serial to receive at the different speeds, especially the higher speeds.

Make sure you have the NMEA 2000 network terminated correctly.

I just tested my code at many different baud rates and I still just receive numbers. Thanks for the response

Even with the change I suggested?

According to the Wikipedia page, NMEA 2000 isn't ASCII character strings and it's 250k baud. The standard is apparently derived from CAN bus. Without knowing any more than that, perhaps a CAN bus shield will get you closer, but I don't think a Arduino Uno UART is going to work in this application.

You are not going to get anywhere with your present approach until you do quite a bit more research, and get a suitable interface (not RS422).

I suggest to dump that GPS unit and buy a cheap module that uses serial ASCII NMEA communications.

From the above Wikipedia link:

The NMEA 2000 standard was defined by, and is controlled by, the US-based National Marine Electronics Association (NMEA). Although the NMEA divulges some information regarding the standard, it claims copyright over the standard and the contents thereof are thus not publicly available. For example, the NMEA publicizes which messages exist and which fields they contain, but they do not disclose how to interpret the values contained in those fields. However, enthusiasts are slowly making progress in discovering these PGN definitions.