//####MATH #include //####SLEEP STUFF #include Sleep sleep; //####SMS STUFF // Include the GSM library #include #define PINNUMBER "" // initialize the library instance GSM gsmAccess; GSM_SMS sms; //####GPS STUFF #include #include AltSoftSerial mySerial; //AltSoftSerial ALWAYS uses the following pins: // // Board Transmit Receive PWM Unusable // ----- -------- ------- ------------ // Teensy 2.0 9 10 (none) // Teensy++ 2.0 25 4 26, 27 // Arduino Uno 9 8 10 // Arduino Mega 46 48 44, 45 // Wiring-S 5 6 4 // Sanguino 13 14 12 Adafruit_GPS GPS(&mySerial); #define GPSECHO true boolean usingInterrupt = false; void useInterrupt(boolean); // Func prototype keeps Arduino 0023 happy //uint32_t timer = millis(); //####NORMAL STUFF //Global Variables boolean GPS_Fix; double decDegLat; double decDegLong; char mySmsString[60] = ""; char mySmsStringLat[11]="";//[11] = ""; char mySmsStringLon[11]="";//[11] = ""; char mySmsStringBearLat;//; char mySmsStringBearLon;//; int GPS_Pin_Enable=12; int GPRS_Pin_Enable=11; void setup() { Serial.begin(9600); pinMode(GPS_Pin_Enable,OUTPUT); //Set out GPS_Pin_Enable as an output delay(2000); GPS.begin(9600); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate digitalWrite(GPS_Pin_Enable,LOW);//Turn Off gps useInterrupt(true); pinMode(GPRS_Pin_Enable,OUTPUT);//Set out GPRS as an output digitalWrite(GPRS_Pin_Enable,LOW);//Turn off the GPRS } void loop() { Serial.println(F("Starting up")); digitalWrite(GPS_Pin_Enable,HIGH); //Turn on the gps delay(2000); Serial.println(F("Gps up")); //Get GPS Data GPS_Fix=false; //Gps fix variable set to nothing to get started delay(2000); while(!GPS_Fix) { if (GPS.newNMEAreceived()) { if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false return; // we can fail to parse a sentence in which case we should just wait for another } if ((strstr(GPS.lastNMEA(), "RMC")) && GPS.fix){ digitalWrite(GPS_Pin_Enable,LOW); //Turn off the gps delay(1000); GPS_Fix=true; dtostrf(convertDegMinToDecDeg(GPS.latitude),11,5,mySmsStringLat); dtostrf(convertDegMinToDecDeg(GPS.longitude),11,5,mySmsStringLon); mySmsStringBearLon = GPS.lon; mySmsStringBearLat = GPS.lat; Serial.println(F("Fixed!")); Serial.println(F("GPS off")); break; } Serial.print("\nTime: "); Serial.print(GPS.hour, DEC); Serial.print(':'); Serial.print(GPS.minute, DEC); Serial.print(':'); Serial.print(GPS.seconds, DEC); Serial.print('.'); Serial.println(GPS.milliseconds); delay(1000); } //########################################Turn on and run SMS################################### //Turn On SMS Serial.println(F("Starting up GSM")); gsmOnOff(); //prepare sms message sprintf(mySmsString,"%s",mySmsStringLat,mySmsStringLon); mySmsString[0]=mySmsStringBearLat; mySmsString[12]=mySmsStringBearLon; // connection state boolean notConnected = true; // Start GSM shield // If your SIM has PIN, pass it as a parameter of begin() in quotes while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) notConnected = false; else { //Serial.println("Not connected"); delay(1000); } } Serial.println(F("Sending sms")); Send_SMS(mySmsString); //Send our SMS //Turn Off GPRS gsmOnOff(); Serial.println(F("GSM OFF")); //Sleep for a while then loop again. sleep.pwrDownMode(); Serial.println(F("Sleep")); sleep.sleepDelay(60000); }