renvoyer une structure

Bonjour,

En parcourant le forum j’ai fait la découverte de la librairie EEPROM (que je ne connaissais pas). Les fonctions put et get répondent totalement à un besoin de mise en mémoire (en connaissant le nombre de fois limité en écriture).
Cependant, je cherche à simplifier au mieux mon code en créant une fonction d’écriture et une de lecture.

Objectif : Stocker une position gps (latitude/longitude) en mémoire à l’aide d’une structure et la fonction put puis permettre la lecture de cette structure.

Voici le code réalisé :

#include <EEPROM.h>

/** Structure permettant de stocker les coordonnées latitude/longitude */
struct Structure_Gps {
   float latitude;
   float longitude;
}; 

void setup() {
  Serial.begin(9600);

  // Ecrit la structure en mémoire
  enregistre_position(43.078658,5.785095);


  // Lecture de la structure en mémoire
  lecture_position();

  Serial.print("Latitude = ");
  Serial.println(gps_lue.latitude);

  Serial.print("Longitude = ");
  Serial.println(gps_lue.longitude);
}

void loop() {
} 


float enregistre_position(float Latitude, float Longitude){
    // ecrit en mémoire eeprom
    Structure_Gps gps;
    gps.latitude = Latitude; 
    gps.longitude = Longitude;
    EEPROM.put(0, gps);
}

float lecture_position(){
    //lit la memoire eeprom
      Structure_Gps gps_lue;
      gps_lue.latitude;
      gps_lue.longitude;
    
      EEPROM.get(0, gps_lue);
      return gps_lue;
}

Problème rencontré à la vérification du code :
Arduino : 1.8.1 (Windows 7), Carte : “Arduino/Genuino Uno”

In function ‘void setup()’:
Test_Eeprom:26: error: ‘gps_lue’ was not declared in this scope
Serial.println(gps_lue.latitude);

Comment procéder pour que la fonction lecture_position() retourne la structure gps_lue et que celle-ci soit ‘exploitable’ pour afficher le contenu ?

Merci par avance pour votre aide.

Bonjour, Ta structure gps_lue n'existe pas en dehors de ta fonction lecture_position(). Il faut revoir le chapitre sur la portée des variables.

Bonjour,

Si tu veux retourner plusieurs valeurs dans une fonction, une des méthode est de les passer par référence.
Ce qui donne:

#include <EEPROM.h>

/** Structure permettant de stocker les coordonnées latitude/longitude */
struct Structure_Gps {
  float latitude;
  float longitude;
};

void setup() {
  Serial.begin(9600);

  // Ecrit la structure en mémoire
  enregistre_position(43.078658, 5.785095);


  // Lecture de la structure en mémoire
  float latitude, longitude;
  lecture_position(latitude, longitude);

  Serial.print("Latitude = ");
  Serial.println(latitude);

  Serial.print("Longitude = ");
  Serial.println(longitude);
}

void loop() {
}


void enregistre_position(float Latitude, float Longitude) {
  // ecrit en mémoire eeprom
  Structure_Gps gps;
  gps.latitude = Latitude;
  gps.longitude = Longitude;
  EEPROM.put(0, gps);
}

void lecture_position(float &lati, float &longi) {
  //lit la memoire eeprom
  Structure_Gps gps_lue;
  EEPROM.get(0, gps_lue);
  lati=gps_lue.latitude;
  longi=gps_lue.longitude;
}

En effet pour la fonction gps_lue j'ai bien compris que cela était du à la portée des variables mais je ne voyais pas comment sortir du problème. L'exemple de Kamill (Merci bcp) à levé cette incompréhension.

Merci à vous pour cette aide.