« GPS SPARKFUN MODULE | Main | ADXL 3xx ACCELEROMETER »

GPS SPARKFUN MODULE $GPRMC

FINALLY!

So finally, by using 2 digital pins on the Arduino for serial communication it worked! I might need to parse some data out that i don't need, but this is looking good! Now i can move to adding the accelerometer.

#include
#include

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

byte rx = 6;
byte tx = 7;
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.print(messageline [i], BYTE);
}
}
//Serial.print(SWread(), BYTE); use this to get all GPS output comment out from char2string till here
}

And here's what the serail monitor spits out:

GPSgood!.png

TrackBack

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