Pages: [1]   Go Down
Author Topic: GPS  (Read 642 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
GPS
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti:
non sono certo un esperto di Arduino e sto cercando di far funzionare il programma di Tutorial GPS allegato senza risultato.
Ho un ricevitore GPS che funziona bene per altra applicazione (Motorola Oncore) con protocollo NMEA. Il segnale, ridotto a 5V, arriva al pin rx: lo vedo all'oscilloscopio.
Compiling OK; Uploading OK.
Ma nessun segno di vita.
Penso si arresti al primo "if"
Ma quando cerco di fare il "Copy for forum" dello sketch  si scatenano una serie di errori Java e questo è il risultato... :-[

Grazie ancora per il supporto.


/*
 VEDI PLAYGROUND - GPS-
 Example code for connecting a Parallax GPS module to the Arduino

 Igor Gonz[ch65533]lez Mart[ch65533]n. 05-04-2007
 igor.gonzalez.martin@gmail.com

 English translation by djmatic 19-05-2007

 Listen for the $GPRMC string and extract the GPS location data from this.
 Display the result in the Arduino's serial monitor.

 */

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

 int ledPin = 13;                  // LED test pin
 int rxPin = 6;                    // RX PIN
 int txPin = 7;                    // TX TX
 int byteGPS=-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);
   Serial.begin(4800);
   for (int i=0;i<300;i++){       // Initialize a buffer for received data
     linea=' ';
   }  
 }

 void loop() {
   digitalWrite(ledPin, HIGH);
   byteGPS=Serial.read();         // Read a byte of the serial port
   if (byteGPS == -1) {           // See if the port is empty yet
     delay(1000);
    
   } else {
    
     linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
    
     conta++;                      
     //printByte(byteGPS);  //  statement no more valida replaced by the following
    
     Serial.print(byteGPS);
    
     if (byteGPS==13){            // If the received byte is = to 13, end of transmission
       digitalWrite(ledPin, LOW);
       cont=0;
       bien=0;
       for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
         if (linea==comandoGPR[i-1]){
           bien++;
         }
       }
       if(bien==6){               // If yes, continue and process the data
         for (int i=0;i<300;i++){
           if (linea==','){    // check for the position of the  "," separator
             indices[cont]=i;
             cont++;
           }
           if (linea=='*'){    // ... and the "*"
             indices[12]=i;
             cont++;
           }
         }
         Serial.println("");      // ... and write to the serial port
         Serial.println("");
         Serial.println("---------------");
         for (int i=0;i<12;i++){
           switch(i){
             case 0 :Serial.print("Time in UTC (HhMmSs): ");break;
             case 1 :Serial.print("Status (A=OK,V=KO): ");break;
             case 2 :Serial.print("Latitude: ");break;
             case 3 :Serial.print("Direction (N/S): ");break;
             case 4 :Serial.print("Longitude: ");break;
             case 5 :Serial.print("Direction (E/W): ");break;
             case 6 :Serial.print("Velocity in knots: ");break;
             case 7 :Serial.print("Heading in degrees: ");break;
             case 8 :Serial.print("Date UTC (DdMmAa): ");break;
             case 9 :Serial.print("Magnetic degrees: ");break;
             case 10 :Serial.print("(E/W): ");break;
             case 11 :Serial.print("Mode: ");break;
             case 12 :Serial.print("Checksum: ");break;
           }
           for (int j=indices;j<(indices[i+1]-1);j++){
             Serial.print(linea[j+1]);
           }
           Serial.println("");
         }
         Serial.println("---------------");
       }
       conta=0;                    // Reset the buffer
       for (int i=0;i<300;i++){    //  
         linea=' ';            
       }                
     }
   }
 }

/*If the above code works, in the serial monitor window you should see the following:


Valid position (status is A):


 ...
 ...

 $GPGGA,154653,4428.2011,N,00440.5161,W,0,00,,-00044.7,M,051.6,M,,*6C
 $GPGSA,A,1,,,,,,,,,,,,,,,*1E
 $GPGSV,3,1,10,02,50,290,003,10,25,24,045,35,27,56,145,00,,,,,,,,*78
 $GPRMC,154653,V,4428.2011,N,00440.5161,W,000.5,342.8,050407,,,N*7F  

 ---------------
 Time in UTC (HhMmSs): 154653
 Status (A=OK,V=KO): V
 Latitude: 4428.2011
 Direction (N/S): N
 Longitude: 00440.5161
 Direction (E/W): W
 Speed in knots: 000.5
 Direction in degrees: 342.8
 Date in UTC (DdMmAa): 050407
 Magnetic variation:  
 Variation (E/W):  
 Mode: A

 ---------------

 ...
 ...

B: Valid positon: The GPS light shines steadily.


 ...
 ...

 $GPGGA,154654,4428.2011,N,00440.5161,W,0,00,,-00044.7,M,051.6,M,,*6B
 $GPGSA,A,1,,,,,,,,,,,,,,,*1E
 $GPGSV,3,1,10,02,50,290,00
 $GPGGA,154655,4328.1874,N,00340.5185,W,1,03,08.5,-00044.7,M,051.6,M,,*79
 $GPGSA,A,2,13,23,25,,,,,,,,,,08.5,08.5,00.9*0E
 $GPGSV,3,1,10,02,50,290,26,04,60,210,26,08,33,173,29,10,21,296,00*7E
 $GPGSV,3,2,10,13,58,044,34,16,03,035,00,20,02,109,00,23,26,057,34*7B
 $GPGSV,3,3,10,25,24,045,35,27,56,145,27,,,,,,,,*7D
 $GPRMC,154655,A,4428.1874,N,00440.5185,W,000.7,000.0,050407,,,A*6C  

 ---------------
 Time in UTC (HhMmSs): 154655
 Status (A=OK,V=KO): A
 Latitude: 4428.1874
 Direction (N/S): N
 Longitude: 00440.5185
 Direction (E/W): W
 Speed in Knots: 000.7
 Heading in degrees: 000.0
 Date in UTC (DdMmAa): 050407
 Magnetic variation:  
 Variation (E/W):  
 Mode: A
 ---------------

 ...
 ...
*/
Logged

Pages: [1]   Go Up
Jump to: