[Conseil] Aide programme GSM et GPS

Bonjour, je doit pour mon projet pouvoir envoyer a un numero la postion gps de l'arduino quand celui ci le demande par gps. Mais j'ai un probleme dans mon programme , d'apres des recherche c'est a cause des librairies GSM et GPS mais je n'ai pas de solution

Voila le programme

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <Wire.h>
#include <GSM.h>
int val = 0; // variable to store the read value
const float c = 11;
const float d = 22;

define PINNUMBER "0000" //definir le code PIN
// initialiser l'instance bibliothèque
GSM gsmAccess;
GSM_SMS sms;
TinyGPS gps;
SoftwareSerial ss(7, 6);
char remoteNumber[20];

void setup()
{
Serial.begin(115200);
ss.begin(4800);

Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();

Serial.begin(9600);

Serial.println("SMS Messages Receiver");

//Etat de la connection
boolean notConnected = true;

// Démarrer le shield GSM

while(notConnected)
{

if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;// Si la carte sim ou le shield gsm n'est pas connecter
else
{
Serial.println("Non connecter");// Afficher "non connecter"
delay(1000);
}
}

Serial.println("GSM initialiser");
Serial.println("En attente de message");
}

void loop()

{
GPS();
}

void GPS(){

char c;
bool newData = false;
unsigned long chars;
unsigned short sentences, failed;

// For one second we parse GPS data and report some key values
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (ss.available())
{
char c = ss.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)
{

// If there are any SMSs available()
if (sms.available())
{
Serial.println("Message reçus du:"); //Imprimer sur le moniteur "Message reçus de:"

// Get remote number
sms.remoteNumber(remoteNumber, 20);
Serial.println(remoteNumber);
}

while(c=sms.read())
{
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print("LAT=");
Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
Serial.print(" LON=");
Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
Serial.print(" SAT=");
Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
Serial.print(" PREC=");
Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
}

gps.stats(&chars, &sentences, &failed);
Serial.print(" CHARS=");
Serial.print(chars);
Serial.print(" SENTENCES=");
Serial.print(sentences);
Serial.print(" CSUM ERR=");
Serial.println(failed);
if (chars == 0)
Serial.println("** No characters received from GPS: check wiring **");

sms.beginSMS("0000000000");
sms.print(TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : 6);
sms.endSMS();
sms.flush();
}
}

int readSerial(char result[])
{
int i = 0;
while (1)
{
while (Serial.available() > 0)
{
char inChar = Serial.read();
if (inChar == '\n')
{
result[i] = '\0';
Serial.flush();
return 0;
}
if (inChar != '\r')
{
result[i] = inChar;
i++;
}
}
}
}

Et en message d'erreur

GSM\GSM3SoftSerial.cpp.o: In function `__vector_3':

C:\Program Files (x86)\Arduino\libraries\GSM\src/GSM3SoftSerial.cpp:499: multiple definition of `__vector_3'

SoftwareSerial\SoftwareSerial.cpp.o:C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.cpp:227: first defined here

GSM\GSM3SoftSerial.cpp.o: In function `GSM3SoftSerial::spaceAvailable()':

C:\Program Files (x86)\Arduino\libraries\GSM\src/GSM3SoftSerial.cpp:487: multiple definition of `__vector_4'

SoftwareSerial\SoftwareSerial.cpp.o:C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.cpp:392: first defined here

GSM\GSM3SoftSerial.cpp.o: In function `GSM3SoftSerial::spaceAvailable()':

C:\Program Files (x86)\Arduino\libraries\GSM\src/GSM3SoftSerial.cpp:487: multiple definition of `__vector_5'

SoftwareSerial\SoftwareSerial.cpp.o:C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.cpp:392: first defined here

collect2.exe: error: ld returned 1 exit status

J'ai vraiment besoin d'aide alors si vous avez des idée je suis preneur

GSM.h implémente son propre software Serial qui reprend en grande partie SoftwareSerial.h ... Donc il y a des doublons que le compilo n'aime évidemment.

Y'a pas 36 solutions :

Ok merci , maintenant sa donne sa :

#include <AltSoftSerial.h>



#include <TinyGPS.h>
#include <Wire.h>
#include <GSM.h>

int val = 0;         // variable to store the read value
const float c = 11;


#define PINNUMBER "0000" //definir le code PIN

// initialiser l'instance bibliothèque
 GSM gsmAccess; 
 GSM_SMS sms;
 TinyGPS gps;
AltSoftSerial ss(9, 8);
char remoteNumber[20];  

  
  
void setup()
{
  Serial.begin(115200);
  ss.begin(4800);
  
  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  
  Serial.begin(9600); 

   Serial.println("SMS Messages Receiver");

   //Etat de la connection
   boolean notConnected = true;

   // Démarrer le shield GSM
   
   while(notConnected)
   {
     
      
  
 if(gsmAccess.begin(PINNUMBER)==GSM_READY)
       notConnected = false;// Si la carte sim ou le shield gsm n'est pas connecter
     else
     {
       Serial.println("Non connecter");// Afficher "non connecter" 
       delay(1000);
     }
}

   Serial.println("GSM initialiser");
   Serial.println("En attente de message");
}

void loop()
  
  {
   GPS();
   }
 


   
  void GPS(){
    
    char c;
    bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.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)
  {
   


   // If there are any SMSs available()  
   if (sms.available())
   {
     Serial.println("Message reçus du:"); //Imprimer sur le moniteur "Message reçus de:"

     // Get remote number
     sms.remoteNumber(remoteNumber, 20);
     Serial.println(remoteNumber);
     }
 
  
  while(c=sms.read())
  {
     float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
  
  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
    
   
       sms.beginSMS("000000000");
      sms.print(TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : 6);
      sms.endSMS();
    sms.flush();
  }
  }
  
  int readSerial(char result[])
{
  int i = 0;
  while (1)
  {
    while (Serial.available() > 0)
    {
      char inChar = Serial.read();
      if (inChar == '\n')
      {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if (inChar != '\r')
      {
        result[i] = inChar;
        i++;
      }
    }
  }
}

J'ai pu de probleme lors de la compilation mais dans le moniteur sa reste bloquer a SMS Messages Receiver T'aurais pas une idée du probleme ?

T'as essayé en inversant 9 et 8 ?