IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Separation de Code


Sujet :

Arduino

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 69
    Points : 58
    Points
    58
    Par défaut Separation de Code
    Bonjour à tous !

    je travaille actuellement sur un gros projet où je tente de faire communiquer des carte arduino (Heltec LoRa Esp32 Wifi) suivant le schéma maitre/esclave
    je possède actuellement 3 cartes:
    le maitre qui doit principalement gérer un serveur wifi
    1 esclave qui doit enregistrer des données et les transmetres au maitre
    et 1 esclave qui doit contrôler des moteurs suivant les ordres du maitre

    actuellement tous mon code tien sur un seul fichier et je commence à me casser les dents dessus

    mes 3 cartes possèdes chacune un identifiant enregistrer en haut de mon fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int Identifiant = 1
    //et je traite cet identifiant de cette manière:
    void loop() {
      // put your main code here, to run repeatedly:
    if Identifiant == 1 {
    sendData();
    else if Identifiant == 2 {
    MesureCapteur();
    ...
    j'aurais aimé savoir :
    Est 'il Possible de séparer le code en plusieurs fichier tout en ayant certaine fonctions/Structure commune à toute les cartes?
    Vautil mieux faire un projet different pour chaque carte ?

    Cordialement Baptiste

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 721
    Points : 5 410
    Points
    5 410
    Par défaut
    faites 3 projets, un pour chaque carte car elles ont des rôles très différents.

    Mais s'il y a du code ou des variables qui vraiment le même dans les 3 projets, vous pouvez créer un fichier (par exemple commun.cpp) dans lequel vous mettez le code et un fichier (commun.h) dans lequel vous déclarez les interfaces de programmation et les variables qui doivent être globales comme étant "extern"

    imaginons que vous ayez 3 fonctions f1(), f2() et f3() en commun et des variables a,b,c locales pour ces fonctions et une variable qui doit être globale: variableGlobale

    vous faites dans commun.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef _commun_h_
    #define _commun_h_
    
    #include <Arduino.h> // pour que le fichier connaisse toutes les fonctions de l'environnement Arduino
    
    // une variable globale qu'il faudra allouer ailleurs, dans le .cpp
    extern int variableGlobale; // extern pour dire qu'elle doit être connue, mais son espace sera réservé ailleurs, dans le .cpp
    
    void f1();
    void f2();
    void f3();
    
    #endif
    la partie en rouge sert à éviter d'importer deux fois le même code. c'est de la compilation conditionnelle. #ifndef (si pas défini) ça dit au compilateur "si tu ne connais pas le mot _commun_h_ alors je te le déclare comme connu" (plus tout le reste). Comme cela la prochaine fois qu'il rencontre le cette include il connaîtra ce mot et donc ne dupliquera pas l'importation

    et dans commun.cpp vous écrivez le code des fonctions, mettez les variables locales et allouez l'espace aussi pour la variable gloale
    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
    17
    18
    19
    20
    21
    22
    23
    24
    #include "commun.h"
     
    int a = 10;
    int b = 20;
    int c = 30;
    int variableGlobale = 42; // allocation de la mémoire 
     
    void f1()
    {
      Serial.print("dans f1 a vaut ");
      Serial.println(a);
    }
     
    void f2()
    {
      Serial.print("dans f2 b vaut ");
      Serial.println(b);
    }
     
    void f3()
    {
      Serial.print("dans f3 c vaut ");
      Serial.println(c);
    }
    enfin dans votre monTest.ino vous incluez commun.h ce qui a pour effet de lui faire connaître vos fonctions et votre variable globale
    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
    #include "commun.h"
     
    void setup()
    {
      Serial.begin(115200);
      // on peut appeler nos fonctions
      f1();
      f2();
      f3();
     
      // ou accéder nos variables globales
      Serial.print("dans setup() variableGlobale vaut ");
      Serial.println(variableGlobale);
    }
     
    void loop() {}
    Vous mettez ces 3 fichiers dans le même répertoire qui doit s'appeler du nom du sketch sans le .ino donc ici monTest

    Quand vous ouvrez le sketch vous verrez les 3 onglets
    Nom : IDE.png
Affichages : 495
Taille : 181,6 Ko


    quand vous compilez et chargez le code, la console série (mettez là à 115200 bauds) devrait afficher :
    dans f1 a vaut 10
    dans f2 b vaut 20
    dans f3 c vaut 30
    dans setup() variableGlobale vaut 42

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2019
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    merci pour les infos!

    j'ai essayé de reproduire l'example que vous m'avez fourni,

    cependant comment créer plusieurs fichiers.ino qui utilisent le même fichier commun.cpp ?

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 721
    Points : 5 410
    Points
    5 410
    Par défaut
    Citation Envoyé par Baptou88 Voir le message
    merci pour les infos!

    j'ai essayé de reproduire l'example que vous m'avez fourni,

    cependant comment créer plusieurs fichiers.ino qui utilisent le même fichier commun.cpp ?
    - soit vous les dupliquez le .cpp et .h (s'ils ne sont pas amenés à changer) dans le dossier du sketch de chaque projet (c'est un peu lourd)
    - soit vous créez un dossier nommé commun et vous mettez commun.cpp et commun.h dans ce dossier puis vous déplacez ce dosser dans le dossier des bibliothèques arduino que vous téléchargez

    En faisant le compilateur ira regarder d'abord dans votre dossier local (si vous y avez mis une copie c'est celle qui retiendra) sinon dans le dossier avec toutes les autres bibliothèques.

    PS/ trouvez un nom plus parlant que "commun",quelque chose qui resume à quoi servent tout ce qui est défini dans ces fichiers - peut être "MasterSlaveLib" par exemple

Discussions similaires

  1. Maitriser jsbin et les éditeurs de code HTML CSS JS separément
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/03/2018, 16h30
  2. Separation code PHP/SQL de mon HTML
    Par micus dans le forum Langage
    Réponses: 1
    Dernier message: 11/08/2016, 11h17
  3. Scannez code barre 2D avec de group separator
    Par vincikito dans le forum C#
    Réponses: 2
    Dernier message: 23/03/2016, 08h33
  4. code shell erreur make : missing separator
    Par amissan51 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/05/2012, 19h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo