Why can I get GPS fix while Im an GSM mode
pierrot10 2014-09-14 09:56:59 3957 Views1 Replies Good evening,
I still have difficulties to understand the user of gps and gsm mode. I am sorry.
I worked hard I can have good result.
Here is my code, where I am going to explain.
Note, now, I work wirh Leonardo board instead of UNO
Fiest I turn up the module. I will not past all function as the setup loop works fine
steup()
Code: Select allvoid setup() { // TURN THE SERIAL AT 9600 baut Serial.begin(baud_rate); // Comm to PC while(!Serial); // while the serial stream is not open, do nothing: #ifdef LEONARDO Serial1.begin(baud_rate); // Comm to GPS/GSM while(!Serial1); // while the serial stream is not open, do nothing: #endif delay(4000); // Wait for 4sec after begin if(debug) { Serial.println(F("\n******************************")); Serial.println(F("STARTING SYSTEM Read AT stream")); Serial.println(F("******************************")); } // SET THE PIN pinMode(pin_gsm,OUTPUT); // Set the pins pinMode(pin_gps,OUTPUT); pinMode(pin_power,OUTPUT); powerUpModule: // POWER THE MODULE. THE powerUp function will attempt 4 time if AT does not return RDY if(powerUp(4)) // Nb of attempt { // Enabling GSM mode gsm_enable(); /* the gsm_enable does digitalWrite(pin_gsm,LOW); //Enable GSM mode digitalWrite(pin_gps,HIGH); //Disable GPS mode delay(2000); */ // Staring GPS AT+CGPSPWR=1 AT+CGPSRST=0. if(start_gps()) { readyToGo = true; if(debug) { Serial.println(F("\n***********")); Serial.println(F("READY TO GO")); Serial.println(F("***********\n")); } } else { // gps or rst does not return OK readyToGo = false; goto powerUpModule; } } else { // Could not be poweredUp if(debug) Serial.print(F("Could not powerup the module.")); readyToGo = false; } }
From now, I AM ON GSM MODE
Now the loop() loop does simply
Code: Select allvoid loop() { if(readyToGo) { if(debug) serialhwread(); // Check the gps stat if(gps_stat() > 0) { // Display gps fixes gps_read(); } delay(5000); } }
To understand my question, look at the two following function
Code: Select allint gps_stat(void) { if(debug) Serial.println(F("\n> Getting GPS Stat")); int val = 0; if(strstr(read_AT_string("AT+CGPSSTATUS?",3000),"OK") != NULL) { if(strstr(buffer,"+CGPSSTATUS: Location Unknown") != NULL) { val=0; } if(strstr(buffer,"+CGPSSTATUS: Location Not Fix") != NULL) { val=1; } if(strstr(buffer,"+CGPSSTATUS: Location 2D Fix") != NULL) { val=2; } if(strstr(buffer,"+CGPSSTATUS: Location 3D Fix") != NULL) { val=3; } } else { if(debug) Serial.println(F(" Could not get GPS Stat")); val=0; } /* "Location Unknown": if GPS is not run "Location Not Fix": after GPS is run ,and haven’t fixed, "Location 2D Fix" : after GPS status is 2D fixed, "Location 3D Fix" : after GPS status is 3D fixed. */ if(debug_buffer) { Serial.println(F("------- Show buffer------")); Serial.println(buffer); Serial.println(F("-------------------------\n")); } return val; }
and
Code: Select all// read data to gps_buf[] from GPS static int gps_read () { read_AT_string("AT+CGPSINF=2",6000); Serial.println(F("------- Show buffer------")); Serial.println(buffer);; Serial.println(F("-------------------------\n")); }
You can observe, I use the AT command
Code: Select allAT+CGPSSTATUS? AT+CGPSINF=2
After about 20sec, I got fixes while I never switch the GPS mode
Code: Select alldigitalWrite(pin_gps,LOW); //Enable GPS mode digitalWrite(pin_gsm,HIGH); //Disable GSM mode delay(2000);
But why!!!!!!
Does the gps mode is a way to receive the GPS fix automoticaly from Serial?
In my case, I can I switch S3 to GSM mode?
Then could you clearly telll me why I have to switch to GPS mode. I carefuly look at the Sketc exemple and particularely to https://www.dfrobot.com/wiki/index.php/G ... indication (The last, at the bottom "GPS Sample Code").
I observed that the GPS mode is enabled at the end of the start_up function, and it stay at the gps mode. I also never observed the command AT+CGPSINF= to get the GPS fixes.
Could you clarify me that. It would be very helpfully.
Many many thank
In the older version, UART select is the switch of the GSM and GPS, but it is not very convenient to change its working mode. So if the switch in middle, you could control it via code.
In the USB debugging mode, if you want to check the GPS data, turn the switch to GSM side, and input AT command, then you need switch it GPS side to check the data in the monitor.
And for the GPS fix, I don't have information regarding this feature yet. It is better to check its datasheet.
Anyway, I find a library about this chip. maybe you can take a look. Wrote by marco
https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
Grey.CC 
