affichage GPS et bibliothèque

Bonjour,

Je me suis fait un petit GPS pour embarquer dans un avion RC.
J’utilise 2 HC-12 sur le canal 1, 9600 bauds, 20 dBm, FU3, un arduino nano et une LCD I2C.

D’après cette vidéo EB_#379 Mini-Plaquette - Transceiver de Données UART HC-12 - YouTube il est préférable d’utiliser la bibliothèque AltSoftSerial à la place de SoftwareSerial quand on utilise des HC-12, mais cela me crée un problème d’affichage.

Quand j’utilise SoftwareSerial ,le montage fonctionne bien, les coordonnées GPS sont bien affichées.
Dés que j’utilise AltSoftdSerial, j’ai bien mes premières inscriptions de bienvenue mais les coordonnées ne s’affichent plus.

Par contre le moniteur série affiche bien avec AltSoftSerial, on dirai une incompatibilité avec l’affichage série.

Que pourrais je faire?

#include <TinyGPS.h>
#include <AltsoftSerial.h>     //avant SoftwareSerial.h         
#include <Wire.h>                      
#include <LiquidCrystal_I2C.h>         
AltsoftSerial GPS(1,3);            //avant SoftwareSerial  
 
TinyGPS  Gps;

LiquidCrystal_I2C lcd(0x27, 16, 2);     //    SDA > pin A4;  SCL > pin A5

void setup()
{
  lcd.backlight();                  //ajouté
  lcd.begin();               //avant lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(2,0);                   
  lcd.print("Salut Serge");
  lcd.setCursor(1,1);                   
  lcd.print("attente signal");      
  GPS.begin(9600);
  delay(10000);                          // avant 1500
  lcd.clear();  
}

void getgps(TinyGPS &gps)
{
  
  float latitude, longitude;
  
  if ( GPS.available() >= 0 )
  {
  Gps.f_get_position(&latitude, &longitude);
  lcd.setCursor(0,0);
  lcd.print("Lat: "); 
  lcd.print(latitude,6); 
  lcd.print("  ");
  lcd.setCursor(0,1);
  lcd.print("Long: "); 
  lcd.print(longitude,6); 
  }
  
}

void loop()
{
  byte a;
  if ( GPS.available() > 0 ) 
  {
    a = GPS.read(); 
    if(Gps.encode(a)) 
            {
               getgps(Gps); 
            }          
  } 
}

diiity

Cette déclaration pose problème

AltsoftSerial GPS(1,3);            //avant SoftwareSerial

Tu utilises l'IO 1 qui est déjà utilisé par la liaison série.

De toutes les façons, d'après la doc de la librairie, avec une carte basée sur l'ATmega 328 il faut utiliser les I/Os 8 et 9

Ah et comment je peux corriger cela, je ne suis pas l'auteur du code.

1 serait l'entrée TXD, c'est bien cela?

AltSoftSerial(uint8_t rxPin, uint8_t txPin, bool inverse = false)

Sur une Uno, donc probablement aussi une nano, tu peux utiliser (voir ici)

  • Tx : 9
  • Rx : 8

et le constructeur simple :

AltSoftSerial GPS;

A vérifier, car je n'ai trouvé aucune information précise

lesept:
A vérifier, car je n'ai trouvé aucune information précise

AltSoftSerial mySerial;
Create the AltSoftSerial object. Only one AltSoftSerial can be used, with the fixed pin assignments shown above.

Voir le lien que j'ai donné plus haut vers le site du créateur.

J'ai eu des interférences sur un montage utilisant un GPS, peut-être que ton problème a la même origine ...
Tu peux voir ici :

A noter aussi que ça ne présente aucun intérêt de passer l’instance du gps par référence à la fonction et qu’il faut encore moins tester s’il y a un caractère sur le port série

 void getgps(TinyGPS &gps) // votre gps est dans une variable globale...
{
  float latitude, longitude;
  if ( GPS.available() >= 0 ) // POURQUOI ??

Bonjour,

Tout d'abord merci à tous.

Quand je tape cette ligne:

AltSoftSerial(uint8_t rxPin, uint8_t txPin, bool inverse = false)

j'ai ce message d'erreur :

expected ')' before 'rxPin

il attend quoi?

diiity

je voulais aussi rajouter:

Je ne suis pas à l'origine du programme, débutant depuis pas mal de temps d'ailleurs dans l'arduino, je dois aussi avoué que je suis une bille dans ce genre d’exercice, je ne pourrais donc pas expliquer le pourquoi du comment.

diiity

cette syntaxe AltSoftSerial(uint8_t rxPin, uint8_t txPin, bool inverse = false)c’est quand on définit la fonction. Pour l’appeler vous devez faire AltSoftSerial(9, 8); // ou AltSoftSerial(9, 8, false);bien sûr adaptez les N° de pins.

voici ce que j’ai fait;

#include <TinyGPS.h>
#include <AltSoftSerial.h>              
#include <Wire.h>                      
#include <LiquidCrystal_I2C.h> 
AltSoftSerial(uint8_t rxPin, uint8_t txPin, bool inverse = false)        
AltSoftSerial(9, 8, false);            //SoftwareSerial GPS(1,3);

là il me fait erreur expected ‘)’ before ‘rxPin’

et si je ne met pas la ligne:

AltSoftSerial(uint8_t rxPin, uint8_t txPin, bool inverse = false)

j’ai cette erreur: expected unqualified-id before numeric constant

faites juste AltSoftSerial GPS;les pins sont les pins par défaut de toutes façons (9 et 8 )

Ah ok, dans ma première version j'avais mis (1,3), là je comprends mieux.

Merci

diiity

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