[Résolu]GPS arduino mega

Bonjour,
j’ai un programme pour réceptionner le signal GPS et pour récupérer l’accéléromètre.
Il fonctionne bien sur un Arduino Leonardo sauf que depuis le changement vers un Arduino Mega,
le signal GPS n’est plus filtré. Je devais seulement recevoir les “GPRMC” et “GPGGA” et il me récupére d’autre signal.
J’ai bien sure changer les ports entre le changement d’Arduino

//ajout des bibliotheques
    #include <Lighter_Adafruit_GPS.h>
    #include <SPI.h>
    #include <SoftwareSerial.h>
    #include <SD.h>
    #include <avr/sleep.h>
    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_LSM303_U.h>
    #include <Adafruit_10DOF.h>
    #include <Adafruit_10DOF.h>
    #include <Adafruit_BMP085_U.h>
    #include <Adafruit_L3GD20_U.h>



//creation des objets accel, mag et 10dOF
    Adafruit_10DOF                 dof   = Adafruit_10DOF();
    Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301);
    Adafruit_LSM303_Mag_Unified   mag   = Adafruit_LSM303_Mag_Unified(30302);
 

    SoftwareSerial mySerial(8, 7);//creation liaison GPS sur le port 8 et 7
    
    Lighter_Adafruit_GPS GPS(&mySerial);//creation de l'objet GPS

//declaration des fonctions
    boolean usingInterrupt = false;
    void useInterrupt();


    File logfile;//nom donner pour ecrire sur la SD
    int i = 0;//correspond au num d'événement

    void setup() 
    {//initialisation
    
    //declaration led pour SD 
      pinMode(13, OUTPUT);
     
      
      //demarrage du 10DOF
      accel.begin();
      mag.begin();

      SD.begin(10,11,12,13);//demarrage SD en indiquand ses ports 
     
       
       //creation nouveau fichier a chaque demarrage
        char filename[99];//tableau de 100 cases
      strcpy(filename, "GPSLOG00.TXT");//ajout du nom (GPSLOG00) dans le tableau 
      for (uint8_t i = 0; i < 100; i++) 
      {
        filename[6] = '0' + i/10; //incremente la case 7 des que i augmente de dizaine
        filename[7] = '0' + i%10;//incremente la case 8 des que i augmente d'unité
        
        //si le nom du fichier n'existe pas, il le crée
        if (! SD.exists(filename)) {
          break;
        }
      }

    
     
      logfile = SD.open(filename, FILE_WRITE);//création d'un fichier en fonction de i
      
      GPS.begin(9600);//demarrage du GPS
      GPS.sendCommand("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28");//désactive la sortie
      GPS.sendCommand("$PMTK220,1000*1F");//fréquence de 1hZ
      GPS.sendCommand("$PGCMD,33,0*6D");//demande mise a jour signal
    
     //ecriture de l'entête
       logfile.print("evenement"); //ecrire du premier signal 
      logfile.print("#");
      logfile.print("batterie");
      logfile.print("#");
      logfile.print("signal"); //ecrire du deuxieme signal
      logfile.print(" ");
      logfile.print("GPS");
      logfile.print("#");
      logfile.print("coordonnee roll");
      logfile.print("#");
      logfile.print("coordonnee pitch");
      logfile.print("#");
      logfile.print("coordonnee heading");
      logfile.print("#");
      logfile.println("temperature");
      delay(20);//attente de 20 ms
      useInterrupt();//appel de l'interruption
    }
  
  //appelle du premier signal reçu 
    SIGNAL(TIMER0_COMPA_vect) {
      char c = GPS.read();//lecture trame GPS dans la variable C
    }
    //fonction interruption
    void useInterrupt() {
        TIMSK0 |= _BV(OCIE0A);
        usingInterrupt = true;
     
    }

    void loop()
    {
    
     float val = analogRead(0);//ajout de la lecture du port analogique 0 dans val
     val = val *5 /1024;
      float temperature= (((((analogRead(1)) *5.0)/1024.0)* 1000)-500)/10;//lecture de la tension et converti en °
 
      //declaration des variables
      sensors_event_t accel_event;
      sensors_event_t mag_event;
      sensors_vec_t   orientation;
  
       //ajout des pointeurs au menbre de la classe 
       accel.getEvent(&accel_event);
       mag.getEvent(&mag_event);

      if (dof.fusionGetOrientation(&accel_event, &mag_event, &orientation))//si on reçoit les 3 informations du 10DOF
      {
         
      
        if (! usingInterrupt) //si il n'y a pas d'interrutpion
        {
          char c = GPS.read();//ajoute nouveau signal à la variable
        }
       
        if (GPS.newNMEAreceived()) //si il y a une nouvelle récéption
        {
            char *stringptr = GPS.lastNMEA();//ajout de l'ancienne a la variable
           
           //écriture dans le fichier
           logfile.print(i);
          logfile.print("#");
           logfile.print(val);
           logfile.print("#");
           i++;//incrémentation de l'événement
           
          
        uint8_t stringsize = strlen(stringptr);//verification de la bonne trame
       //if (stringsize != logfile.write((uint8_t *)stringptr, stringsize))    //ecriture du string dans le fichier
         int z=0;
       while(stringptr[z]!=NULL)
     {
     if(stringptr[z]!=10 && stringptr[z]!=13) logfile.write(stringptr[z]);
   z++;
     }  
        if (strstr(stringptr, "RMC") || strstr(stringptr, "GGA")); //si il y a une nouvelle trame "RMC" ou "GGA" , ajout au fichier
       
            
             //écriture dans le fichier
            logfile.print("#");
            logfile.print(orientation.roll);
            logfile.print("#");
            logfile.print(orientation.pitch);
            logfile.print("#");
            logfile.print(orientation.heading);
            logfile.print("#");
            logfile.println((temperature),1);
           
             logfile.flush();//on vide le buffer
           
         }
       }
       
      delay(333);//pause de 333ms, conseiller pour le GPS
      
    }

bonjour a priori , il manque cette ligne dans l'initialisation du module GPS

GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);

cela ne résout pas le problème :confused:

bonjour,
pourquoi mettre

    #include <SoftwareSerial.h>

alors que c’est déjà dans la lib Lighter_Adafruit_GPS.h

après je n’ai pas vu de vitesse serial dans ton code.
style
Lighter_Adafruit_GPS begin(9600); 9600 étant une vitesse au pif

j'utilise softwareserial pour déclarer mes ports entrés/sorties(10et11) du GPS Il y a un autre moyen?

iprogamer:
j’utilise softwareserial pour déclarer mes ports entrés/sorties(10et11) du GPS
Il y a un autre moyen?

lis ce que j’ai marqué et va faire un tour sur le github en lien.
dans la lib Lighter_Adafruit_GPS.h il y a déjà ceci

#ifndef Lighter_Adafruit_GPS_H
#define Lighter_Adafruit_GPS_H
#include “Arduino.h”
#include <SoftwareSerial.h>

// how long to wait when we’re looking for a response
#define MAXWAITSENTENCE 5
#include “SoftwareSerial.h”

oui j'ai vu mais je vois pas comment déclarer les port

  Lighter_Adafruit_GPS(SoftwareSerial (10,11));

ou

  Lighter_Adafruit_GPS(10,11);.

cela ne fonctionne pas avec ça.

peut être qu'en mettant ceci

SoftwareSerial Lighter_Adafruit_GPS(10, 11);


void setup(){
 Lighter_Adafruit_GPS begin(9600); //9600 au pif pour l'exemple

}

a lire ceci
https://forums.adafruit.com/viewtopic.php?f=31&t=66450

oui j'avais suivi ce model.

J'ai essayer avec ton software lighter... mais je n'ai pas réussi car il n'y a pas la fonction send

      GPS.sendCommand("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28");//désactive la sortie
      GPS.sendCommand("$PMTK220,1000*1F");//fréquence de 1hZ
      GPS.sendCommand("$PGCMD,33,0*6D");//demande mise a jour signal

J’ai trouve la solution ,
avec la mega on ne peut pas utilisé SoftwareSerial pour le GPS mais

#define Serial1:
  Lighter_Adafruit_GPS GPS(&Serial1);//creation de l'objet GPS