Arduino Beetle et communication Serial

Bonjour, je suis actuellement en train d'essayer de faire communiquer un arduino Beetle (Leonardo) avec un GPS (NEO 6 MV2).
En soit rien d'extraordinaire, sauf que la je ne comprends pas pourquoi la communication ne s'effectue pas.
Avant de présenter mon problème je souhaite indiquer que j'ai fait le test entre un arduino nano et ce même GPS et que le code et le résultat sont opérationnels (affichage des données GPS dans le moniteur corrects).
Du coup, je souhaite donc utiliser ce GPS sur une carte Beetle sauf que je n'arrive pas à lire les data envoyées par le GPS. Le croisement des fils RX/TX est OK, tout bien alimenté, le retour dans le moniteur affiche 0.0000 ... en gros je n'arrive pas à paramétrer la communication..

A noter : mon inclut le pilotage d'un servomoteur, qui lui fonctionne bien.

Voici le code :


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

Servo myservo;  // create servo object to control a servo
TinyGPS gps;
SoftwareSerial serial1(0, 1);

void setup()
{
  //Serial.begin(9600);
  serial1.begin(9600);
  pinMode(0, INPUT);
  pinMode(1, OUTPUT);
  pinMode(9, OUTPUT);
  
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
  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 (serial1.available())
    Serial.println("serial1 available");
    {
      char c = serial1.read();
      //Serial.println(analogRead(A0));
      //char c = analogRead(A0);
      //Serial.write(c); // uncomment this line if you want to see the GPS data
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    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());
    Serial.println("servo job");
  }
  
  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);

  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 **");
}

En vous remerciant.
Erwann.

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

votre carte c'est

ou un Leonardo

Bonjour, ma carte est effectivement la mini carte Beetle, mais je me connecte dessus en utilisant IDE en choisissant la carte leonardo.

Pourquoi utiliser SoftwareSerial?
Sur D0 et D1 tu as accès à l'UART matérielle. Il suffit de remplacer serial1 par Serial1 dans ton code.

Bonjour, ok et dans ce cas alors je supprime la ligne softwareserial et remplace par Serial1(0, 1);

Non, Serial1 est déjà déclaré dans les librairies Arduino. Tu n'as pas à le faire.
Juste, tu l'utilises en remplaçant serial1 dans ton code par Serial1

Y a t-il besoin de redeclarer les pin 0 et 1 pour Serial 1 ? Le code compile bien, avec Serial1 "available" mais pas de retour de data du gps.

Tu es certain que les 2 sont configurés avec le même baudrate.

Tu pourrais commencer par un bête

void loop(){
   if (Serial1.available()){
        Serial.write(Serial1.read());
   }
}

Bonjour, cela me semble en effet plus pertinent..

Trop Cool !
Merci beaucoup.

Il manque le Serial.begin() dans ce code

Merci à l’avenir de ne pas poster d’image d’un texte. Copiez collez le texte dans des blocs avec les balises de code.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.