Programación multitarea

Gracias por su ayuda me sirvió de mucho.
Una vez que tengo todo eso funcionado me surge un problema nuevo cuando hago el timbre al módulo GSM este me responde con los datos del GPS pero me di cuenta de que cada vez que le doy un timbre o el control de tiempo llega a los 30 segundos arduino sufre un reset automático probé las siguientes posibilidades:

Primero que no sea cuestión de alimentación separe los módulos con alimentación diferente para cada uno

Luego vi algo de que hay un error con el reset en la versión de arduino uno R 2 y le agregue un 1n4148 entre reset y 5V http://dreamingrobots.com/forums/viewtopic.php?f=8&t=258+

Al final creo que el problema está en la librería de tinygps (http://sundial.org/arduino/index.php/tinygps/)no sé qué causa esto pero me parece que va por ese lado esta librería usa esta forma de obtener los datos del GPS

boolean gpsTiny()
{
  bool newData = false;
  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (Gps.available()>0)
    {
      char c =Gps.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;        
    }
  }
   if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    
    flat == (TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    flon == (TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    
    vel=gps.f_speed_kmph();
    
                      char cadLat[10];
                      dtostrf(flat,10,6,cadLat);
                      latitud=String(cadLat);
                      
                      char cadLon[10];
                      dtostrf(flon,10,6,cadLon);
                      longitud=String(cadLon);
                      
                      char cadVel[4];
                      dtostrf(vel,4,1,cadVel);
                      velocidad="Velocidad :"+String(cadVel)+"Km/h";
                    
    

  }
      Gps.flush();
      return newData;  
}

Mi sospecha es que arduino ve el ciclo while como un ciclo infinito y resetea el arduino pero lo que no entiendo es como puede mandar el SMS con los datos del gps una ves que los manda llega el reset