Bonjour,

Plus le temps passe, plus mon petit programme pour mon ESP8266 possède de lignes,
assez pour que j'envisage de prendre du temps pour rendre tout cela plus lisible.

Ayant maintenant pris connaissance de la séparation prototypes(.h) VS code(.cpp) je fais quelques tests non concluants.


Avertissement préalable
Afin de ne pas avoir à tout structurer/découper d'un coup je veux avoir recours massivement aux variables globales et même fonctions globales.
... Oui je sais, c'est le mal
Merci de bien vouloir accepter cette orientation et relever le défi tel qu'il est posé



Mon programme de test est découpé comme suis:
  • xxx.ino : le code principal setup/loop
  • Variables.h : contient les variables GLOBALES
  • Fonctions.h : Prototypes des fonctions GLOBALES
  • Fonctions.cpp : Fonctions GLOBALES


Ce qui donne:

  • xxx.ino :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <Arduino.h>
    #include "Variables.h"
    #include "Fonctions.h"
     
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200);
    }
     
    void loop() {
      // put your main code here, to run repeatedly:
     
    TexteGlobal="Blabla";
    Fct_Globale(1);
    }
  • Variables.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* 
     * Variables Globales
     *
     * Variables.h
     */
    #ifndef Variables_h
    #define Variables_h
     
    #include <WString.h>
     
    String TexteGlobal;
     
    #endif
  • Fonctions.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* 
     * Fonctions Globales
     *
     * Fonctions.h
     */
     
    #include <WString.h>
     
    String Fct_Globale(int Param_num);
  • Fonctions.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /* 
     * Fonctions Globales
     *
     * Fonctions.cpp
     */
     
    #include <Arduino.h>
    #include "Fonctions.h"
     
    // *****************************************************
    // FONCTION de test
    String Fct_Globale(int Param_num)
    {
      Serial.println(TexteGlobal+Param_num);
      return(TexteGlobal+Param_num);
    }


Alors les problèmes:
  1. Pourquoi hors du fichier ino, String n'est-il pas reconnu sans l'appel de WString.h ?
  2. Même question avec l'utilisation de Serial dans Fonctions.cpp sans l'appel de Arduino.h
  3. Pourquoi ai-je besoin d’appeler Variables.h dans Fonctions.cpp alors qu'il est déjà appelé dans le xxx.ino? Pour le compilateur stupide c'est ça? Pas moyen de rendre Variables.h plus "publique"?
  4. Pourquoi si j'appelle à nouveau variables.h dans Fonctions.cpp il trouve la variable définie plusieurs fois même avec #ifndef Variables_h #define #endif autour des variables de Variables.h?
  5. Et mêmes questions après quand j'essaye d'appeler des fonctions de Fonctions.h depuis d'autres fichiers.h?


Merci pour votre aide