Incohérences

Bonjour,

Je souhaite creer un programme qui lorsqu’on lui envoie un SMS (par exemple “g”), ça renvoie la position GPS.

J’arrive, séparément, à récupérer les positions GPS et répondre à un SMS.
Mais dès qu’il s’agit de “mélanger” les 2, plus rien ne fonctionne, et le problème n’est jamais identique…

Mon code qui ne fonctionne pas :

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs
 
#include "SIM900.h"
#include "sms.h"
#include "SoftwareSerial.h"
#include "TinyGPS.h"

SMSGSM sms;
 TinyGPS gps;
SoftwareSerial nss(6, 9);            // Yellow wire to pin 6
boolean started=false;
char smsbuffer[160];
char n[20];
float lat=0,lon=0;
char message[100];
 
void setup()
{
  nss.begin(4800); // baud rate GP
  //Serial connection.
  Serial.begin(115200);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  if (gsm.begin(19200)){
    Serial.println("\nstatus=READY");
    started=true; 
  }
  else Serial.println("\nstatus=IDLE");
  delay(4000);
  if(started)
  {
    delsms();
    //Enable this two lines if you want to send an SMS.
    if (sms.SendSMS("************", "Arduino correctement initialise !"))
      Serial.println("\nSMS envoye");
  }
   //
}

 
 // Get and process GPS data
void gpsdump(TinyGPS &gps, float* lat, float * lon) {
  float flat, flon;
  unsigned long age;
  gps.f_get_position(&flat, &flon, &age); // fonction prédéfinie qui récupère les données GPS
  Serial.print(flat, 4); Serial.print(", "); // affiche latitude
  Serial.println(flon, 4); // affiche longitude
  *lat=flat;
  *lon=flon;
}

// Feed data as it becomes available 
bool feedgps() {   // vérifie que le système est disponible
  while (nss.available()) {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}
 
 
 
void loop()
{
          unsigned long start = millis();
	char SerialInByte;
        bool newdata = false;
  int pos=0;
  //Serial.println("Loop");
  if(started){
    pos=sms.IsSMSPresent(SMS_ALL);
    if(pos){
      Serial.println("IsSMSPresent at pos ");
      Serial.println(pos);
      sms.GetSMS(pos,n,smsbuffer,100);
        Serial.println(n);
        Serial.println(smsbuffer);
        if(!strcmp(smsbuffer,"R")){
                if(sms.SendSMS(n, "SMS recu par Arduino")==1) Serial.println("Message envoye");
                else Serial.println("Erreur : message pas envoye.");
                 while (millis() - start < 5000) 
                {  // Update toutes les 5 secondes
                  if (feedgps())     //  verifie que le système est disponible
                  newdata = true;  //booleen indiquant que la donnée existe
                }
                if (newdata) 
                {    // si la donnée existe, on récupère les coordonnées et on les affiche
                    gpsdump(gps,&lat,&lon);
                   sprintf(message,"La lattitude est %d.%d, la longitude est %d.%d.",(int)lat,(int)((lat-(int)lat)*10000),(int)lon,(int)((lon-(int)lon)*10000));
                }
        } 
      else    
      {
                if(sms.SendSMS(n, "Ce code ne correspond a rien.")==1) Serial.println("Message envoye");
                else Serial.println("Erreur : message pas envoye.");
      }
        
        delsms();
        

    }
  }
};

void delsms(){
  Serial.println("delsms");
  for (int i=0; i<10; i++){  //do it max 10 times
      int pos=sms.IsSMSPresent(SMS_ALL);
      if (pos!=0){
        Serial.print("\nFind SMS at the pos ");
        Serial.println(pos);
        if (sms.DeleteSMS(pos)==1){   
          Serial.print("\nDeleted SMS at the pos ");
          Serial.println(pos);     
        }
        else
        {
          Serial.print("\nCant del SMS at the pos ");
          Serial.println(pos);        
        }
      }
    }
 
}

(1) Ce code affiche dans la console :
Voir PJ1.

(2) Si j’enlève ça :

                 while (millis() - start < 5000) 
                {  // Update toutes les 5 secondes
                  if (feedgps())     //  verifie que le système est disponible
                  newdata = true;  //booleen indiquant que la donnée existe
                }
                if (newdata) 
                {    // si la donnée existe, on récupère les coordonnées et on les affiche
                    gpsdump(gps,&lat,&lon);
                   sprintf(message,"La lattitude est %d.%d, la longitude est %d.%d.",(int)lat,(int)((lat-(int)lat)*10000),(int)lon,(int)((lon-(int)lon)*10000));
                }

Le serial me dit que le SMS est envoyé mais je ne le reçois pas.

(3) Si en plus j’enlève les 2 sous programmes du GPS. Là je reçois le SMS, de plus je peux lui envoyer des SMS et il me répond.
Ce qui n’est absolument pas logique, car à ce moment là les 2 sous programmes ne sont plus appelés, car j’ai enlevé la partie (2).

Je n’y comprend rien, je n’arrive à isoler le problème.

Si vous pouviez m’éclairer pour y voir plus clair.

Merci