Problemas con localizador GPS

Buenas tardes,

Estoy intentando montar un localizador gps pero estoy teniendo problemas para que los modulos gps y gsm funcionen conjuntamente.

El modulo gps que estoy utilizando es es este:

gps

el modulo gms este:

GSM

Los dos modulos por separado funcionan a la perfeccion pero cuando intento implementar el codigo conjunto deja de funcionar, en el codigo tengo comentado el iniciar el modulo GPS (initGPS():wink: ya que si lo descomento al recibir llamada no hace nada, creo que el fallo esta a la hora de iniciar los puertos.

Por favor, alguien podr铆a guiarme para ver donde puede estar el fallo? Gracias de antemano

#include <SoftwareSerial.h>
#include <TinyGPS.h>//incluimos TinyGPS

TinyGPS gps;//Declaramos el objeto gps

SoftwareSerial serialgps(4,3);//Declaramos el pin 4 Tx y 3 Rx
SoftwareSerial mySerial(7,8); //rx,tx

String inGSM; //Almacenar la informaci'on leida del modulo gsm
String numList[]={"676394895","676394895"}; //N'umeros autorizados
boolean enviado=false;
double ttl=0; //Tiempo de vida


//Declaramos la variables para la obtenci贸n de datos
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;
void setup(){
聽 mySerial.begin(9600);
聽 Serial.begin(9600);
 // initGPS(); //iniciar el modulo gps
 initGSM(); //iniciar el modulo gsm*/


}
 
void initGSM(){
 
聽 Serial.println("Iniciando...");
聽 mySerial.print("AT+CLIP=1\r\n"); //Activar alarma llamada
聽 delay(500);聽 
聽 mySerial.print("AT+CMGF=1\r\n"); //Activar modo texto
聽 delay(500); 
}

 
void initGPS(){
聽  
聽 serialgps.begin(9600);//Iniciamos el puerto serie del gps
聽 //Imprimimos:
聽 Serial.println("");
聽 Serial.println("GPS GY-GPS6MV2 Leantec");
聽 Serial.println(" ---Buscando senal--- ");
聽 Serial.println("");
聽 delay(500);
}


//Funci'on: Comprueba si el n'umero est'a autorizado
//true si tiene permiso, false si no lo tiene.
boolean isAllow(String num){
聽 for (int i=0;i<sizeof(numList);i++){
聽 聽  if (num==numList[i])
聽 聽 聽 聽  return true;
聽 }
聽 return false;
}

void sendSMS(){

聽 Serial.println("Enviando SMS...");
聽 聽 聽 mySerial.print("AT+CMGF=1\r");聽 //Configura el modo texto para enviar o recibir mensajes
聽 聽 聽 delay(1000);
聽 聽 聽 mySerial.println("AT+CMGS=\"676394895\"");聽 //Numero al que vamos a enviar el mensaje
聽 聽 聽 delay(1000);
聽 聽 聽 mySerial.println("SMS enviado desde un Arduino. Saludos de Prometec.");聽 // Texto del SMS
聽 聽 聽 delay(100);
聽 聽 聽 mySerial.println((char)26); //Comando de finalizaci贸n ^Z
聽 聽 聽 delay(100);
聽 聽 聽 mySerial.println();
聽 聽 聽 delay(5000);聽 // Esperamos un tiempo para que env铆e el SMS
聽 聽 聽 Serial.println("SMS enviado");
}

void loop() {
聽 inGSM="";
聽 ttl++;
聽 
聽 聽 //Leer enventos en modulo gsm
聽 while (mySerial.available()>0){
聽 聽  delay(10);
聽 聽  inGSM += (char)mySerial.read(); 
聽 }
聽 
聽 Serial.print(inGSM);

聽 //Si llamada
聽 if (inGSM.indexOf("RING")>-1){
聽 聽 聽 delay(1000);
聽 聽  
聽 聽 聽 String num;
聽 聽 聽 int inicio=inGSM.indexOf('"')+1;
聽 聽 聽 int fin=inicio+9;
聽 聽 聽 
聽 聽 聽 num=inGSM.substring(inicio,fin); //Extraer n'umero聽 聽 
聽 聽 聽 
聽 聽  
聽 聽 聽 //Si autorizado, accionar rel'e聽 聽 
聽 聽 聽 if (isAllow(num) && enviado==false)
聽 聽 聽 {
聽 聽 聽 聽 聽 聽 Serial.print("Autorizado" + num);
聽 聽 聽 聽 聽 聽 enviado=true;
聽 聽 聽 聽 聽 聽 //sendSMS();
聽 聽 聽 聽 聽 聽 聽 Serial.print("Localizaci贸n enviada");
聽 聽 聽 }
 
聽 }
聽  
聽 //En caso de perder la cobertura, volver a conectarse a la red
聽 if (inGSM.indexOf("CREG:")>-1 && inGSM.indexOf("CREG: 0,1")==-1 && inGSM.indexOf("CREG: 0,5")==-1){
聽 聽 Serial.println("Se ha perdido la cobertura, reiniciando...");
聽 聽 mySerial.print("AT+CFUN=1,1\r\n");
聽 聽 delay(4000);
聽 聽 initGSM();
聽 }
聽 聽 
聽 //Comprobar estado de la red
聽 if (ttl==150000){
聽 聽  mySerial.print("AT+CREG?\r\n");
聽 聽  ttl=0;
聽 }聽  
}

No veo secuencia de POWER_ON del A6.
Debes asegurarte que este bien encendido.
Luego debes asegurarte que tome cobertura.

Por tu comentario no parece ser importante porque te funciona por separado. Mirar茅 el c贸digo a ver que encuentro.

Muchas gracias por la respuesta yo creo que es algo de los pines. Me han indicado que conecte algo al los pines 0,1 ya que creo que viene por ah铆 la cosa porque el codigo por separado funciona pero cuando inicio los pines de los dos modulos deja de funcionar.. la verdad es que estoy un poco pez en todo esto

Los pines 0 y 1 son los pines de Serial Hardware, tu c贸digo usa SoftwareSerial de modo que eso no puede ser.

SoftwareSerial serialgps(4,3);//Declaramos el pin 4 Tx y 3 Rx
SoftwareSerial mySerial(7,8); //rx,tx

Usas 4,3 con el GPS y 7,8 con el A6.
Para la proxima comprate un A7 y ahorras algo... tiene las dos cosas en 1.

Gracias a la ayuda de un compe帽aro 茅ste me los solucion贸, no era nada de pines. Actualmente tengo conectado el modulo gms en los 0,1 y el gps en los 7,8. Era codigo no ten铆a correctamente los while en el loop.

Este es el codigo que cuando recibe llamada envia coordenadas pero a煤n no funciona ya que no envia el sms y tampoco cuelga la llamada pero si obviais esa parte imprime en pantalla las coordenadas del gps.

#include <SoftwareSerial.h>
#include <TinyGPS.h>//incluimos TinyGPS

TinyGPS gps;//Declaramos el objeto gps
SoftwareSerial serialgps(8,7);

//Declaramos la variables para la obtenci贸n de 
聽 聽 聽 //VARIABLES PARA EL MODULO GMS
聽 聽 聽 String inGSM; //Almacenar la informacion leida del modulo gsm
聽 聽 聽 String numList[]={"676394895","676394895"}; //Numeos
聽 聽 聽 boolean enviado=false; //para saber si hemos enviado sms con coordenadas
聽 聽 聽 double ttl=0; //Tiempo de vida
聽 聽 聽 //VARIABLES PARA EL MODULO GPS
聽 聽 聽 int year;
聽 聽 聽 byte month, day, hour, minute, second, hundredths;
聽 聽 聽 unsigned long chars;
聽 聽 聽 unsigned short sentences, failed_checksum;
聽 聽 聽 bool datos_gpsOK = false;
聽 聽 聽 float latitude, longitude;

void setup() {
聽 serialgps.begin(9600);//Iniciamos el puerto serie del gps
聽 Serial.begin(9600);
聽 delay(1000);
聽 
聽 Serial.print("AT+CMGF=1\r"); // Configuraci贸n del m贸dulo GSM en modo texto.
聽 delay(100);
聽 
聽 Serial.print("MODULOS GSM Y GPS INICIADOS");
聽 enviado=false;
}//Fin Setup


//Comprobamos si el numero llamante es autorizado
boolean isAllow(String num) {
聽 for (int i=0;i<sizeof(numList);i++) {
聽 聽  if (num==numList[i])
聽 聽 聽 聽  return true;
聽 }//Fin for
聽 return false;
}//Fin isAllow

void SendSMS() {聽 // Enviamos coordenadas por sms

聽 Serial.print("Latitud/Longitud: "); 
聽 Serial.print(latitude,5); 
聽 Serial.print(", "); 
聽 Serial.print(longitude,5);

colgar();
聽 聽 聽 
聽 聽 聽 Serial.println("AT+CMGS=\"676394895\"");聽 //Numero al que vamos a enviar el mensaje
聽 聽 聽 delay(1000);
聽 聽 聽 
聽 聽 聽 Serial.println("SMS enviado desde un Arduino. Saludos de Prometec.");聽 // Texto del SMS
聽 聽 聽 delay(100);
聽 聽 聽 
聽 聽 聽 Serial.println((char)26); //Comando de finalizaci贸n 
聽 聽 聽 delay(100);
聽 聽 聽 
聽 聽 聽 Serial.println();
聽 聽 聽 delay(5000);聽 // Esperamos un tiempo para que env铆e el SMS
聽 聽 聽 
聽 聽 聽 Serial.println("SMS enviado");
}

//Leemos coordenadas
void leo_GPS() { // aca solo lees el GPS, y aca esta. Se entiende?
 
聽 while (serialgps.available()>0) { //Leemos gps
聽 聽 聽  
聽 聽 聽 聽  int c = serialgps.read(); 

聽 聽 聽 聽  if (gps.encode(c))聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽  gps.f_get_position(&latitude, &longitude);
聽 聽 聽 聽 聽 聽  datos_gpsOK = true;
聽 聽 聽 聽 聽 聽  break;
聽 聽 聽 聽  }
聽 }//Fin while
}

void colgar() {
聽 // implementa colgar
聽 Serial.println("ATH");聽 // Cuelga la llamada
聽 delay(1000);
聽 Serial.println("Llamada finalizada");
}
void loop()聽 {
聽 bool finGSM = false;
聽 inGSM = "";
聽 ttl++;
聽 int c ;
聽 
聽 leo_GPS();

聽 //Leer eventos en modulo gs
聽 while (Serial.available()) {
聽 聽  delay(10);
聽 聽  inGSM += (char)Serial.read(); 
聽 聽  finGSM = true;
聽 }聽 //Fin while
聽 if (finGSM)
聽 聽 聽 Serial.print(inGSM);

聽 //Si entra llamada
聽 if (inGSM.indexOf("RING")>-1)聽  {
聽 聽 聽 delay(100);

聽 聽 聽 String num;
聽 聽 聽 int inicio=inGSM.indexOf('"')+1;
聽 聽 聽 int fin = inicio+9;

聽 聽 聽 num = inGSM.substring(inicio,fin); //Extraer n'umero聽 聽 
聽 聽 聽 //Si autorizado,聽  
聽 聽 聽 if (isAllow(num) && enviado==false)聽 {
聽 聽 聽 聽 聽 if (datos_gpsOK) {聽 // si es true Enviamos SMS 
聽 聽 聽 聽 聽 聽 聽 enviado = true;
聽 聽 聽 聽 聽 聽 聽 SendSMS();
聽 聽 聽 聽 聽 聽 聽 Serial.println("SMS ENVIADO");
聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 else {
聽 聽 聽 聽 聽 聽 聽 Serial.println("SMS NO ENVIADO");
聽 聽 聽 聽 聽 }//fin else
聽 聽 聽 }//Fin if

聽 }//Fin if
}//fin loop