# Plusieurs fichiers

**URL:** <https://forum.arduino.cc/t/plusieurs-fichiers/147455>\
**Category:** Français\
**Created:** [February 26, 2013, 12:43pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455 "2013-02-26T12:43:49Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 26, 2013, 12:43pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/1 "2013-02-26T12:43:49Z")

</div>

Bonjour,  
Je voudrais decouper mon programme en plusieurs fichiers et d'après ce que j'ai vu dans les tutos et forums, j'ai crée un .C et un .H  
J'arrive du programme principal à accéder aux structures mais pas à mes fonctions. Pouvez vous m'indiquer où je me plante.  
Le message d'erreur est:  
_CODA\_V1.cpp.o: In function `loop':* *D:\SOFTS\arduino-1.0.3-windows\arduino-1.0.3/CODA_V1.ino:39: undefined reference to `Generation\_Prepa\_sinusoide(Parametres\_courbe\_type, int)'_  
Merci

Le main :

```cpp
#include "Generation.h"
#define Nbre_pts_courbes 360  // Nombre de points pour la courbe (résolution)

/ ********************************************* /
/ ***                INIT                 *** /
/ ********************************************* /

void setup() 
{
 

}

/ ********************************************* /
/ ***                MAIN                 *** /
/ ********************************************* /

void loop()
{
  Parametres_courbe_type Parametres_courbe;
  delay(1000);
  Generation_Prepa_sinusoide(Parametres_courbe,0);
  
}

```

Le .H

```cpp
#ifndef Generation_h

#define Generation_h

      #include "Arduino.h"
      
      // *********************************************************************************************************************************
      //  VARIABLES ET STRUCTURES
      // *********************************************************************************************************************************
      
      // Structure des parametres recus par ethernet
      typedef struct Parametres_courbe_type
      {
          byte type;
          byte angle;
          byte redresse;
          int amplitude;
          int frequence;
          int Nbre_periodes;
          int offset;
          float pas;
          boolean checksum_ok;
          
      }  Parametres_courbe_type;
      
      // Structure de generation de la courbe
      typedef struct Courbe_type
      {
          int amplitude;
          float pas;
          int nombre_periode;
          int points_courbes[360];
          int Nbre_points;
      
      }  Courbe_type;

      // *********************************************************************************************************************************
      //  PROTOTYPES DE FONCTIONS
      // *********************************************************************************************************************************
      
      // Fonction de création des points de la courbe
      Courbe_type Generation_Prepa_sinusoide(Parametres_courbe_type Parametres_courbe,int Nbre_pts_courbes);
      
      // Fonction de génération de la courbe
      void Generation_signal(Courbe_type Courbe, int Decalage_zero,int Point_en_cours,int pas_ec, int Periode_en_cours);
      
        
#endif

```

Le .C

```cpp
/ ********************************************************************************************************************** /
/ ********************************************************************************************************************** /

#include "Generation.h"
#include "Arduino.h"

/ ********************************************************************************************************************** /
/ ********************************************************************************************************************** /

/ ********************************************* /
/ ***        PREPARATION SINUSOIDE       *** /
/ ********************************************* /

Courbe_type Generation_Prepa_sinusoide(Parametres_courbe_type Parametres_courbe,int Nbre_pts_courbes)
{
 
}
              
        
/ ********************************************************************************************************************** /
/ ********************************************************************************************************************** /

/ ******************************************************* /
/ ***              GENERATION SIGNAL               *** /
/ ******************************************************* /
        

void Generation_signal(Courbe_type Courbe, int Decalage_zero,int Point_en_cours,int pas_ec, int Periode_en_cours)
{
        
}       
        
/ ********************************************************************************************************************** /
/ ********************************************************************************************************************** /

```

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 26, 2013, 4:49pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/2 "2013-02-26T16:49:46Z")

</div>

Autre question sur ce sujet, j'ai essayé de mettre un include d'un .H ("Test.h") dans mon programme principal.  
Ce .H contient lui même un.H (\<Ethernet.h\>)  
Si j'utilise des elements de la librairie Ethernet dans mon programme principal, ils ne sont pas reconnus.  
Je dois mettre #include \<Ethernet.h\> dans mon programme principal à la place de #include "Test.h"  
Mon "Test.h" n'inclut il pas mon \<Ethernet.h\>

Désolé pour ces questions qui doivent être simples mais j'ai un peu du mal à m'y retrouver... =(

---

<div class="post-metadata">

**Author:** ![skywodd](https://avatars.discourse-cdn.com/v4/letter/s/e19adc/32.png) [@skywodd](https://forum.arduino.cc/u/skywodd)\
**Post date:** [February 27, 2013, 7:48am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/3 "2013-02-27T07:48:34Z")

</div>

Bonjour,

Fait un zip de ton dossier de projet pour qu'on regarde de plus prés où est le problème 😉

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 27, 2013, 8:35am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/4 "2013-02-27T08:35:50Z")

</div>

Merci c'est vraiment sympa XD  
J'espere pouvoir aider à mon tour quand je serais meilleur !!!

[CODA\_V1.7z](https://forum.arduino.cc/uploads/short-url/qyQB0HqKQ3TEFmKl3rdKELAkvUi.7z) (3.89 KB)

---

<div class="post-metadata">

**Author:** ![68tjs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/68tjs/32/927374_2.png) [@68tjs](https://forum.arduino.cc/u/68tjs)\
**Post date:** [February 27, 2013, 10:39am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/5 "2013-02-27T10:39:13Z")

</div>

Je n'arrive pas à décompresser cette archive :  
Voila ce que j'obtiens quand je veux la décompresser.

```cpp
b@zeus:~/telechargement$ 7z x CODA_V1.7z

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=fr_FR.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Processing archive: CODA_V1.7z

Error: Can not open file as archive

```

Idem avec "e" à la place de "x" et "7za" à la place de "7z".

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 27, 2013, 12:42pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/6 "2013-02-27T12:42:08Z")

</div>

Pareil chez moi quand je la reprend du forum. Sur mon PC celle d'origine marche ...  
Je ressaye de la mettre

[CODA\_V1.7z](https://forum.arduino.cc/uploads/short-url/qyQB0HqKQ3TEFmKl3rdKELAkvUi.7z) (3.89 KB)

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 27, 2013, 12:44pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/7 "2013-02-27T12:44:14Z")

</div>

Non ca veut pas =(

Y'a juste à aller dans Attach et puis parcourir ?

---

<div class="post-metadata">

**Author:** ![68tjs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/68tjs/32/927374_2.png) [@68tjs](https://forum.arduino.cc/u/68tjs)\
**Post date:** [February 27, 2013, 1:22pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/8 "2013-02-27T13:22:55Z")

</div>

Essaye un autre logiciel pour créer l'archive.  
Tu as peut-être une configuration "_particulière_" sur ton PC.

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 27, 2013, 1:40pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/9 "2013-02-27T13:40:44Z")

</div>

J'essaye zip et rar

[CODA\_V1.zip](https://forum.arduino.cc/uploads/short-url/rP3id5tLtJX234VzhzH9Jema3fK.zip) (4.97 KB)

[CODA\_V1.rar](https://forum.arduino.cc/uploads/short-url/lUxoHENHaWyXbpwRklTP325yFil.rar) (4.79 KB)

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 27, 2013, 1:41pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/10 "2013-02-27T13:41:46Z")

</div>

Le .rar a l'air de marcher

---

<div class="post-metadata">

**Author:** ![jfs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jfs/32/213485_2.png) [@jfs](https://forum.arduino.cc/u/jfs)\
**Post date:** [February 27, 2013, 2:11pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/11 "2013-02-27T14:11:23Z")

</div>

Le .zip également

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 28, 2013, 8:11am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/12 "2013-02-28T08:11:36Z")

</div>

Vous avez pu telecharger et l'ouvrir correctement ?

---

<div class="post-metadata">

**Author:** ![jfs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jfs/32/213485_2.png) [@jfs](https://forum.arduino.cc/u/jfs)\
**Post date:** [February 28, 2013, 8:37am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/13 "2013-02-28T08:37:05Z")

</div>

Oui.

---

<div class="post-metadata">

**Author:** ![68tjs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/68tjs/32/927374_2.png) [@68tjs](https://forum.arduino.cc/u/68tjs)\
**Post date:** [February 28, 2013, 8:56am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/14 "2013-02-28T08:56:00Z")

</div>

J'ai lu que pour partager des variables globales entre plusieurs fichiers il faut les déclarer "extern" dans chaque fichier:

```cpp
extern int GLOBAL;

```

Peut-être que de plus grosses pointures en programmation pourront-en dire davantage.  
En attendant un coup de gogole sur les déclarations "extern" pourra peut-être te donner une solution.

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 28, 2013, 9:07am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/15 "2013-02-28T09:07:04Z")

</div>

Ok merci pour les variables globales.  
Par contre pour mes fonctions qui m’empechent de compiler et pour le "#include ethernet" qui n'est pas pris en compte

---

<div class="post-metadata">

**Author:** ![68tjs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/68tjs/32/927374_2.png) [@68tjs](https://forum.arduino.cc/u/68tjs)\
**Post date:** [February 28, 2013, 10:11am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/16 "2013-02-28T10:11:18Z")

</div>

Pour les inclusions de fichiers il y a deux syntaxes : \<...\> et "....":

- si le fichier à inclure est dans le chemin de recherche de l'IDE alors  
#include \<tatatata.h\>

- si le fichier à inclure est dans le même répertoire que les fichiers sources alors :  
#include "tatatata.h"

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 28, 2013, 10:40am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/17 "2013-02-28T10:40:19Z")

</div>

Oui c'est bien ce que j'ai fait. Dans mon Web.h j'ai mis \<Ethernet.h\> qui est sous le répertoire de l'IDE.  
Dans mon programme principal j'ai mis "Web.h" qui est dans mon répertoire projet.  
Mais de mon programme principal je n'accède pas à Ethernet.h. Ca marche par contre si je mets \<Ethernet.h\> direct dans mon programme principal.

Pour l'instant j'ai mis la partie Web en commentaire car je n'arrive pas à compiler du fait des fonctions qui ne sont pas trouvées dans Generation.h  
Faut il mettre une syntaxe spéciale comme "extern" devant les prototypes de fonctions de mon .h ?

---

<div class="post-metadata">

**Author:** ![68tjs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/68tjs/32/927374_2.png) [@68tjs](https://forum.arduino.cc/u/68tjs)\
**Post date:** [February 28, 2013, 10:49am UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/18 "2013-02-28T10:49:55Z")

</div>

Là j'ai atteint mes limites, je ne sais pas te répondre.

---

<div class="post-metadata">

**Author:** ![Touf2638](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Touf2638](https://forum.arduino.cc/u/Touf2638)\
**Post date:** [February 28, 2013, 12:57pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/19 "2013-02-28T12:57:54Z")

</div>

Et juste pour info, ca compile chez vous ? Où est ce un problème du à mon PC ?

---

<div class="post-metadata">

**Author:** ![skywodd](https://avatars.discourse-cdn.com/v4/letter/s/e19adc/32.png) [@skywodd](https://forum.arduino.cc/u/skywodd)\
**Post date:** [February 28, 2013, 4:16pm UTC](https://forum.arduino.cc/t/plusieurs-fichiers/147455/20 "2013-02-28T16:16:51Z")

</div>

Bonjour,

Bon ... par où commencer ...

- l'ide arduino ne compile que des fichiers **.cpp et .h** , pas .c ou .hpp(oui c'est débile mais c'est comme ça)
- les fichiers headers ne sont pas "des poubelles à include", pas d'include dans un header sauf si c'est absolument nécessaire
- privilégie les types primitifs aux types "arduino" dans les fichiers .h , ça évite d'inclure Arduino.h (qui inclut plein d'autre trucs ...)
- les commentaires c'est bien mais l'ide arduino gère sont truc de manière assez tordu.  
Pas de commentaire inutile pour séparer des fonctions, ..., garde juste les commentaires pertinents.
- si tu veut pouvoir inclure un .h avec une déclaration de structure/type/class/... ne met aucun commentaire avant, juste les includes en entête du fichier source  
(si l'ide arduino voit un (ou plusieurs) include en début du .ino il met les prototypes de fonctions **aprés** )

Sinon globalement j'ai l'impression que tu cherches à faire un code découpé sur plusieurs fichiers, mais pas vraiment une librairie je me trompe ?  
Faire un duo .h/.cpp c'est bien pour une librairie, sinon fait juste des .ino, l'ide arduino les fusionnes au .ino principal avant la compilation.  
Ça t'éviterais d'avoir à faire des déclarations de variables globales "extern" ...

(j'étais parti à te corriger le code pour qu'au moins il compile, mais ça m'as lassé d'avoir à coller des extern à tour de bras ...)

[CODA\_V1.zip](https://forum.arduino.cc/uploads/short-url/pkpIySWSVWcnGvafUxRKVpMFP24.zip) (5.01 KB)

[Next page](https://forum.arduino.cc/t/plusieurs-fichiers/147455.md?page=2)
