title: Sending GPS location via GSM module
body: <p>I am using a SIM900A GSM module and a NEO-6m GPS module. I want to send the location via the GSM module when the GSM module receives a message.</p>
  
  <p>My code is working when I am receiving and sending any message with the help of the GSM module, but it is not working when I join the two, i.e. GPS and GSM modules.</p>
  
  <p>Here is my code for the two.</p>
  
  <pre><code>#include &lt;SoftwareSerial.h&gt;
  // GPS
  #include &lt;TinyGPS.h&gt;
  
  // GSM
  SoftwareSerial SIM900A(9, 10);
  SoftwareSerial mySerial(5, 6);
  TinyGPS gps;
  
  void setup() {
    Serial.begin(9600);
    SIM900A.begin(9600);
    SIM900A.println("AT+CNMI=2,2,0,0,0");
    mySerial.begin(9600);
    delay(1000);
  }
  
  void loop() {
    bool newdata = false;
    String buffer = readSIM900A();
    if(SIM900A.available() &gt; 0)
      Serial.println(SIM900A.read());
    if (buffer.startsWith("\r\n+CMT: ")) {
      // printing the number
      Serial.println(buffer.substring(9, 22));
      // Remove first 51 characters
      // buffer.remove(0, 51);
      int len = buffer.length();
      // printing message
      Serial.println(buffer.substring(51, len-2));
      if (buffer.substring(51, len-2) == "location") {
        Serial.println("Sending location");
        // GPS
        if (mySerial.available()) {
          char c = mySerial.read();
          if (gps.encode(c)) {
            newdata = true;
          }
        }
        if (newdata) {
          long int lat, lon;
          unsigned long age, age1, date, time, chars;
          gps.get_position(&amp;lat, &amp;lon, &amp;age);
          gps.get_datetime(&amp;date, &amp;time, &amp;age);
          Serial.print("Lat/Long(10^-5 deg): ");
          Serial.print(lat);
          Serial.print(", ");
          Serial.print(lon); 
          Serial.print(" Fix age: "); 
          Serial.print(age); Serial.println("ms.");
          Serial.print("Date(ddmmyy): "); Serial.print(date);
          Serial.print(" Time(hhmmsscc): ");
          Serial.print(time);
          Serial.print(" Fix age: "); Serial.print(age); 
          Serial.println("ms.");
          Serial.print("Alt(cm): "); Serial.print(gps.altitude());
          Serial.print(" Speed(mps): "); Serial.print(gps.f_speed_mps());
          // setting GSM module
          SIM900A.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode
          delay(1000); // Delay of 1000 milli seconds or 1 second
          // sending location from which code word had come
          SIM900A.println("AT+CMGS=\"" + buffer.substring(9, 22) + "\"\r");
          // Replace x with mobile number
          Serial.println("AT+CMGS=\"" + buffer.substring(9, 22) + "\"\r");
          delay(1000);
          SIM900A.print("Lat/Long(10^-5 deg): ");
          SIM900A.print(lat);
          SIM900A.print(", ");
          SIM900A.print(lon); 
          SIM900A.print(" Fix age: "); 
          SIM900A.print(age); SIM900A.println("ms.");
          SIM900A.print("Date(ddmmyy): "); SIM900A.print(date);
          SIM900A.print(" Time(hhmmsscc): ");
          SIM900A.print(time);
          SIM900A.print(" Fix age: "); SIM900A.print(age); 
          SIM900A.println("ms.");
          SIM900A.print("Alt(cm): "); SIM900A.print(gps.altitude());
          SIM900A.print(" Speed(mps): "); SIM900A.print(gps.f_speed_mps());
          SIM900A.println((char)26);// ASCII code of CTRL+Z
          delay(1000);
        }
      }
    }
    delay(100);
  }
  
  String readSIM900A() {
    String buffer;
    while (SIM900A.available()) {
      char c = SIM900A.read();
      buffer.concat(c);
      delay(10);
    }
    return buffer;
  }
  </code></pre>
  
  <p>Above is my final code when the GPS and GSM modules are handled together. They are working totally fine when they are handled separately.</p>
  
  <p>Connections:</p>
  
  <p>Connected Tx, Rx pin of SIM900A to 9, 10 of Arduino Nano respectively, and Tx, Rx of GPS module to 5, 6 respectively. And I also made ground common with Arduino.</p>