Pages: [1]   Go Down
Author Topic: GPS  (Read 288 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
Karma: 0
Posts: 403
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have a parallax GPS that works with my Arduino (non mega). The way I always used it was by using the RX pin (0) and sending the information to a software serial to a LCD screen. That has always worked but now I am trying to send the information through the USB serial port of my computer. I tried both hooking up the GPS to the RX pin and using the GPS through software serial, once I open the Serial monitor the GPS stops sending information

On my Arduino it says Luigino 328, I know when I ordered this it has an extra feature that closes the serial port when uploading (so you can leave devices plugged into the serial port.) I don't know if this will affect it or not.

code below
#include <string.h>
 #include <ctype.h>

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

#include <SoftwareSerial.h>

SoftwareSerial gps(2, 3);

 int ledPin = 13;                  // LED test pin
 int rxPin = 2;                    // RX PIN
 int txPin = 3;                    // TX TX
 int byteSerial=-1;
 char linea[300] = "";
 char comandoGPR[7] = "$GPRMC";
 int cont=0;
 int bien=0;
 int conta=0;
 int indices[13];

 void setup() {

   pinMode(ledPin, OUTPUT);       // Initialize LED pin
   pinMode(rxPin, INPUT);
   pinMode(txPin, OUTPUT);
   for (int i=0;i<300;i++){       // Initialize a buffer for received data
     linea[i]=' ';

 void loop() {
   digitalWrite(ledPin, HIGH);;         // Read a byte of the gps port
    Serial.println(byteSerial, BYTE);     
   if (byteSerial == -1)
   {           // See if the port is empty yet
   } else {
     linea[conta]=byteSerial;        // If there is gps port data, it is put in the buffer
     gps.print(byteSerial, BYTE);
     if (byteSerial==13)   // If the received byte is = to 13, end of transmission
       digitalWrite(ledPin, LOW);
       for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
         if (linea[i]==comandoGPR[i-1]){
       if(bien==6){               // If yes, continue and process the data
         for (int i=0;i<300;i++){
           if (linea[i]==','){    // check for the position of the  "," separator
           if (linea[i]=='*'){    // ... and the "*"
             int i = map(analogRead(A0),0,1023,0,9);
             case 0 :Serial.print("Time ")   ;break;
             case 1 :Serial.print("Status ");break;
             case 2 :Serial.print("Lat ");break;
             case 3 :Serial.print("Dir ");break;
             case 4 :Serial.print("Long ");break;
             case 5 :Serial.print("Dir ");break;
             case 6 :Serial.print("Velo ");break;
             case 7 :Serial.print("Head ");break;
             case 8 :Serial.print("Date ");break;
             case 9 :Serial.print("Magn ");break;
             case 10 :Serial.print("(E/W) ");break;
             case 11 :Serial.print("Mode: ");break;
             case 12 :Serial.print("Checksum: ");break;
           for (int j=indices[i];j<(indices[i+1]-1);j++){
        // Serial.println("---------------");
       conta=0;         // Reset the buffer
       for (int i=0;i<300;i++){    // 
         linea[i]=' ';             


Thank you for your help

Offline Offline
Sr. Member
Karma: 0
Posts: 403
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay, I think it is because of the software serial. The GPS does not seem to work with software serial. Any ideas?

I connected the GPS to RX (0) and the LCD to TX (1) it functions normally (except for different baud rate of GPS and LCD) but once I open the Serial Window It stops pin 13 does not go LOW
« Last Edit: July 03, 2012, 04:52:43 pm by arduinopi » Logged

Pages: [1]   Go Up
Jump to: