Plusieurs fichiers

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 :

#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

#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

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


#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)
{
        
}       
        
/**********************************************************************************************************************/
/**********************************************************************************************************************/

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... =(

Bonjour,

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

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

CODA_V1.7z (3.89 KB)

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

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".

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

CODA_V1.7z (3.89 KB)

Non ca veut pas =(

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

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

J'essaye zip et rar

CODA_V1.zip (4.97 KB)

CODA_V1.rar (4.79 KB)

Le .rar a l'air de marcher

Le .zip également

Vous avez pu telecharger et l'ouvrir correctement ?

Oui.

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

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.

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

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"

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 ?

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

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

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 (5.01 KB)