[RESOLU]Arduino Uno et Mega2560 sont compatible?

Bonjour à tous,
Je suis en train de fabriquer un ordinateur de bord pour ma moto.
Je dois intégrer un GPS.
J'ai fait un petit programme pour tester le module GPS:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

int MaxSpeed = 1;
double HeureDepart = 0.0;
char cVitAvg[20];

SoftwareSerial gps_serial(4, 3);
TinyGPSPlus gps;

void setup() {
  Serial.begin(115200);
  gps_serial.begin(9600);
  Serial.print("Sizeof(gpsobject) = ");
  Serial.println(sizeof(TinyGPSPlus));

}

void loop() {
  int Vitesse = 0;

  while (gps_serial.available() > 0)
  {
    if (gps.encode(gps_serial.read()))
    {
      Serial.println("isvalid");
      Vitesse = gps.speed.kmph();
      if (MaxSpeed < Vitesse) MaxSpeed = Vitesse;
      Serial.println(Vitesse);
      Serial.println(gps.location.lat());
      if ( HeureDepart == 0.0 && Vitesse > 10 )
      {
        HeureDepart = (gps.time.hour() + 1) + (gps.time.minute() / 60.0);
      }
    }
  }

}

Ce code marche bien sur un Arduino uno mais pas sur un arduino Mega2560.
Avec le Mega il y a pas de connexion avec le module GPS car
gps_serial.available()
reste toujours à -1

je précise que le Mega est un clone!

Il y a une explication a ce problème?

Sur un mega pas la peine d’utiliser Software serial - prenez un des autres Serial matériel dispo (même si ça devrait fonctionner sur les bonnes pins...)

Êtes vous sûr d’avoir relié les GND?

Bonsoir

Bien que SofwareSerial ait très peu d'intérêt sur une carte Mega il est possible de l'utiliser à condition de tenir compte des choix possibles pour RX :

Sur la page de référence de SoftwareSerial ont lit ceci :
RX SoftSerial.png

Uno et Mega sont compatibles .... à condition de tenir compte de leurs particularités respectives

RX SoftSerial.png

:smiley:
Super, ça marche.
Merci a J-M-L pour m'avoir suggéré la solution: je ne savais pas de l'existence de "Serial1" "Serial2" "Serial3"

Merci aussi à al1fch pour avoir donné l'explication au probléme.

Le code corrigé pour Mega2560:

#include <TinyGPS++.h>

int MaxSpeed = 1;
double HeureDepart = 0.0;
char cVitAvg[20];

TinyGPSPlus gps;

void setup() {
  Serial.begin(115200);
  Serial3.begin(9600);
  Serial.print("Sizeof(gpsobject) = ");
  Serial.println(sizeof(TinyGPSPlus));

}

void loop() {
  int Vitesse = 0;

  while (Serial3.available() > 0)
  {
    if (gps.encode(Serial3.read()))
    {
      Serial.println("isvalid");
      Vitesse = gps.speed.kmph();
      if (MaxSpeed < Vitesse) MaxSpeed = Vitesse;
      Serial.println(Vitesse);
      Serial.println(gps.location.lat());
      if ( HeureDepart == 0.0 && Vitesse > 10 )
      {
        HeureDepart = (gps.time.hour() + 1) + (gps.time.minute() / 60.0);
      }
    }
  }

}