« TSUNAMI PERFORMANCE | Main | GPS SPARKFUN MODULE $GPRMC »

GPS SPARKFUN MODULE

GPS READING ATTEMPT

I have been trying to interface the GPS Module EM406 from Sparkfun with Arduino, and then later Arduino Mini. I have had some issued figuring out the pin connections, but now what i am struggling with is the code. This is the code i borrowed from the Tutorials and made some changes to:

#include
#include

#define bit9600Delay 84
#define halfBit9600Delay 42
#define bit4800Delay 188
#define halfBit4800Delay 94

byte rx = 0;
byte tx = 1;
byte SWval;
char dataformat [7] = "$GPRMC";
char messageline[80] = "";
int i = 0;

void setup() {
pinMode(rx,INPUT);
pinMode(tx,OUTPUT);
digitalWrite(tx,HIGH);
//digitalWrite(rx,HIGH);
digitalWrite(13,HIGH); //turn on debugging LED
//SWprint('h'); //debugging hello
//SWprint('i');
//SWprint(10); //carriage return
Serial.begin (4800);
}

void SWprint(int data)
{
byte mask;
//startbit
digitalWrite(tx,LOW);
delayMicroseconds(bit4800Delay);
for (mask = 0x01; mask>0; mask <<= 1) {
if (data & mask){ // choose bit
digitalWrite(tx,HIGH); // send 1
}
else{
digitalWrite(tx,LOW); // send 0
}
delayMicroseconds(bit4800Delay);
}
//stop bit
digitalWrite(tx, HIGH);
delayMicroseconds(bit4800Delay);
}

int SWread()
{
byte val = 0;
while (digitalRead(rx));
//wait for start bit
if (digitalRead(rx) == LOW) {
delayMicroseconds(halfBit4800Delay);
for (int offset = 0; offset < 8; offset++) {
delayMicroseconds(bit4800Delay);
val |= digitalRead(rx) << offset;
}
//wait for stop bit + extra
delayMicroseconds(bit4800Delay);
delayMicroseconds(bit4800Delay);
return val;
}
}

void char2string()
{
i=0;
messageline[0] = SWread();
if (messageline [0] == 36) //string starts with $
{
i++;
messageline [i] = SWread();
while (messageline[i] != 13 & i<80) //carriage return or max size
{
i++;
messageline [i] = SWread ();
}
messageline [i+1] = 0; //make end to string
}
}

void loop()
{
digitalWrite (13,HIGH);
char2string();
if (strncmp(messageline, dataformat, 6) == 0 & i>4){
for (int i=0; i Serial.println(messageline [i], BYTE);
}
}
//Serial.print(SWread(), BYTE); use this to get all GPS output comment out from char2string till here
}

Unfortunately this is what i get for data and i only receive serial data when pressing the RESET button:

gpsdataerror.png

"$GPRMC" is the NMEA format that I am looking to parse out. Any suggestions?

TrackBack

TrackBack URL for this entry:
http://itp.nyu.edu/~bp432/cgi-bin/mt/mt-tb.cgi/71