Arduino 3G/GPS (SMS)

Alarm function:

void Alarma(){
  
     if(SMS[x] == '4')
     {
     Serial.println("AT+FSCD=D:/Audio");                //Indicamos en que carpeta esta nuestro mp3
     while(Serial.read()!='K');
     Serial.println("carpeta configurada");  
     Serial.println("AT+CSDVC=3");                      //Le decimos por donde queremos que lo reproduzca, el 3 para el speaker, el 2 para conectar los audífonos.
     while(Serial.read()!='K');
     Serial.println("altavoz seleccionado");
     delay(1000);
     Serial.println("AT+CCMXPLAY=\"alarma.MP3\",0");    //Le damos al play
     while(Serial.read()!='K');
     Serial.println("reproduciendo");
     //retorna a rutina main.
     }
    
  }

Cam function:

/*
 Secuencias para la toma de fotografias
 desde el modulo 3G
*/

//Configuramos parámetros cámara
void tomaFoto(){
  if (SMS[x] == '2')
  {
  Serial.println("Haciendo fotografia...");
  Serial.println("AT+CCAMS");                    //Iniciamos la camara
  while(Serial.read()!='K');
  Serial.println("AT+CCAMSETD=640,480");         //Indicamos la resolucion
  while(Serial.read()!='K');
  Serial.println("AT+CCAMTP");                   //Tomamos la fotografia
  while(Serial.read()!='K');
  delay(2000);                                   
  Serial.println("AT+CCAMEP");                   //Guardamos la foto
  Serial.flush();     
  while(Serial.read()!='/');                     //Seleccionamos a partir de donde vamos a empezar a guardar el nombre de la foto
  while(Serial.read()!='/');
  
  //Guardamos el nombre de la foto para luego enviarla
  int z=0;
  //Mientras z sea menor que 19...
  do
    {
     while(Serial.available()==0);               //Mientras no haya nada en el puerto serie..funciona en standby..
     name[z]=Serial.read();                      //A partir de que reciba algo, lo empieza a almacenar
     z++;
    }
  
  while(z < 19);
     
    while(Serial.read()!='K');
    delay(500);
    Serial.print("El nombre de la foto es "); 
    Serial.println(name); 
    Serial.println("AT+CCAME");                  //Se detiene la cam
    while(Serial.read()!='K');
    Serial.println("Foto almacenada correctamente...");
}
}

GPS function:

void get_GPS(){
  
   answer = sendATcommand("AT+CGPS=1,1","OK",1000);    
    if (answer == 0)
    {
        Serial.println("Error starting the GPS");
        Serial.println("The code stucks here!!");
        while(1);
    }
  
  
  if (SMS[x] == '1')
  {
    answer = sendATcommand("AT+CGPSINFO","+CGPSINFO:",1000);
 delay(60000);   // request info from GPS
    if (answer == 1)
    {

        contador = 0;
        do{
            while(Serial.available() == 0);
            gps_data[contador] = Serial.read();
            contador++;
        }
        while(gps_data[contador - 1] != '\r');
        gps_data[contador] = '\0';
        if(gps_data[0] == ',')
        {
             Serial.println("No GPS data available");  
        }
        else
        {
            Serial.print("GPS data:");
            Serial.println(gps_data);  
            Serial.println("");
        }       

    }
    else
    {
        Serial.println("Error"); 
    }

    delay(2000);  //en caso de if
    
}
}

Recording voice function:

void rec_voz()
{
  if (SMS[x] == '5')
{

  
  //RECORDING A SOUND CLIP 
  int8_t answer, counter;
int onModulePin = 2;
char clip_name[20];
char aux_str[50];



    // Takes a picture, but not saved it
    answer = sendATcommand2("AT+CQCPREC=0,amr", "D:/Audio/", "ERROR", 5000);
    if (answer == 1)
    {
        counter = 0;
        while(Serial.available()==0);
        do{
            clip_name[counter] = Serial.read();
            counter++;
            while(Serial.available()==0);
        }
        while (clip_name[counter-1] != 0x0D);

        clip_name[counter-1] = '\0';

        Serial.print("Clip name: ");                
        Serial.println(clip_name);
        delay(10000);
        /*
        sendATcommand2("AT+CQCPPAUSE", "OK", "ERROR", 2000);
        delay(5000);            
        sendATcommand2("AT+CQCPRESUME", "OK", "ERROR", 2000);
        delay(5000);            
        */
        sendATcommand2("AT+CQCPSTOP", "OK", "ERROR", 2000);

        sendATcommand2("AT+FSCD=D:/Audio", "OK", "ERROR", 2000);
        sprintf(aux_str, "AT+CCMXPLAY=\"%s\",0", clip_name);
        answer = sendATcommand2(aux_str, "OK", "ERROR", 2000);
        if (answer == 1)
        {        
      /*    
            delay(5000);
            sendATcommand2("AT+CCMXPAUSE", "OK", "ERROR", 2000);
            delay(5000);            
            sendATcommand2("AT+CCMXRESUME", "OK", "ERROR", 2000);
            */
            delay(10000);            
            sendATcommand2("AT+CCMXSTOP", "OK", "ERROR", 2000);
        }
        else
        {
            Serial.println("Error playing");    
        }
    }
    else
    {
        Serial.println("Error recording");    
    }
}
}