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 :

code Arduino en plusieurs fichiers


Sujet :

Arduino

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Par défaut code Arduino en plusieurs fichiers
    Bonjour, j'ai un code arduino qui fonctionne bien, il me permets de visualiser la température d'un capteur sur un petit écran lcd.

    temperature_lcd.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    //////////////////////////////////////////////////////////////////////////
    ////                                                                  ////
    ////    affichage de la température                                   ////
    ////    sur écran LCD 16x2                                            ////
    ////                                                                  ////
    //////////////////////////////////////////////////////////////////////////
    // Inclusion des librairies
    #include <Wire.h>
    #include <LiquidCrystal.h>
    #include <OneWire.h> //Librairie du bus OneWire
    #include <DallasTemperature.h> //Librairie du capteur
     
    #include "config.h"
     
    #define NOT_AN_INTERRUPT -1
     
    //const word rpm_facteur = 30;  //  pour moteur 4 cylindres 4 temps : =60/(nombre d'étincelles par tour moteur)
    const byte ledPin = 13;
    int outPin = 9;    // digital pin 9
     
    void setup(){
      //cli ()  ; //  déactive interruptions globales
      #ifdef Debug
      Serial.begin(115200);       // for debugging
      #endif
     
      sensors.begin(); //Activation des capteurs
      sensors.getAddress(sensorDeviceAddress, 0); //Demande l'adresse du capteur à l'index 0 du bus
      sensors.setResolution(sensorDeviceAddress, 12); //Résolutions possibles: 9,10,11,12
     
      //initialisation du LCD
      init_lcd();
      pinMode(ledPin, OUTPUT);
      pinMode(outPin, OUTPUT);
     
      //sei ()  ;  //  active les interruptions
    }
     
    void loop(){
      sensors.requestTemperatures(); //Demande la température aux capteurs
      #ifdef Debug
      Serial.print("La température est: ");
      Serial.print(sensors.getTempCByIndex(0)); //Récupération de la température en celsius du capteur n°0
      Serial.println(" C°");
      #endif
      lcd.clear();
      lcd.print("Temperature =");
      lcd.setCursor(9,1);
      lcd.print(sensors.getTempCByIndex(0));
      lcd.setCursor(14,1);
      lcd.print("C");
     
     
     
    }
    Or je n'arrive pas à compiler dès que je sépare les déclarations et les instanciations en un fichier "config.h"

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #ifndef config_h
    #define config_h
     
    // comment out the next line to eliminate the Serial.print stuff
    // saves about XX Ko of program memory
    //#define Debug
     
    // --- constantes des broches ---
     
    const int RS  =  3; //declaration constante de broche 
    const int E   =  8; //declaration constante de broche 
    const int D4  =  4; //declaration constante de broche
    const int D5  =  5; //declaration constante de broche 
    const int D6  =  6; //declaration constante de broche 
    const int D7  =  7; //declaration constante de broche
     
     
    extern OneWire oneWire(2); //Bus One Wire sur la pin 2 de l'arduino
    extern DallasTemperature sensors(&oneWire); //Utilistion du bus Onewire pour les capteurs
    extern DeviceAddress sensorDeviceAddress; //Vérifie la compatibilité des capteurs avec la librairie
    extern LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
     
     
     
     
    //  -----  déclaration des fonctions  -----
    //initialisation du LCD
    void init_lcd  ();
     
     
     
     
     
     
    #endif
    et un fichier où se trouve les fonctions: config2.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // Inclusion des librairies
    //#include <Arduino.h>
    #include <Wire.h>
    #include <LiquidCrystal.h>
    #include <OneWire.h> //Librairie du bus OneWire
    #include <DallasTemperature.h> //Librairie du capteur
    #include "config.h"
     
    OneWire oneWire(2); //Bus One Wire sur la pin 2 de l'arduino
    DallasTemperature sensors(&oneWire); //Utilistion du bus Onewire pour les capteurs
    DeviceAddress sensorDeviceAddress; //Vérifie la compatibilité des capteurs avec la librairie
    LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
     
     
    //initialisation du LCD
    void init_lcd ()  {
      // Configuration de l'afficheur 16 caractères en 2 lignes
      lcd.begin(16, 2);
      lcd.setCursor(0, 0);
      lcd.print("Initialisation");
      delay(1000);
      lcd.clear();
      lcd.print("Temperature =");
      lcd.setCursor(9,1);
      lcd.print("16.2");
      lcd.setCursor(14,1);
      lcd.print("C");
      delay(1000);
    }
    j'ai bien mis extern pour les variables dans le .h mais rien n'y fait:

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows XP), Board: "Arduino Uno"
    config2.cpp:9: error: redefinition of 'OneWire oneWire'
    config.h:18: error: 'OneWire oneWire' previously declared here
    config2.cpp:10: error: redefinition of 'DallasTemperature sensors'
    config.h:19: error: 'DallasTemperature sensors' previously declared here
    config2.cpp:12: error: redefinition of 'LiquidCrystal lcd'
    config.h:21: error: 'LiquidCrystal lcd' previously declared here
    Quelle est l'erreur que je fais encore ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu utilises en effet le mot-clé extern dans le fichier d'entête, ce qui est une bonne chose. Mais tu fournis également des arguments aux objets, ce qui a pour effet de non seulement les déclarer, mais aussi les définir. Ils sont de ce fait non seulement définis dans le fichier source (pas de soucis à ce niveau, tant qu'il n'y en a qu'un qui le fait ), mais également dans le fichier d'entête (à l'origine de cette erreur).

    Dans le fichier d'entête, tu dois seulement les déclarer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    extern OneWire oneWire;
    extern DallasTemperature sensors;
    extern DeviceAddress sensorDeviceAddress;
    extern LiquidCrystal lcd;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/10/2017, 11h14
  2. [HTML 5] Code source en plusieurs fichiers
    Par gregory2526 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 26/11/2012, 17h15
  3. [XL-2007] Partager du code VBA entre plusieurs fichiers
    Par blumea dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/03/2012, 16h30
  4. Réponses: 15
    Dernier message: 16/01/2009, 00h16

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