Bonjour,
Je débute sur l'Arduino, ayant déjà quelques mois de programmation en C, je me suis dit que c'en était assez proche pour que je l'utilise afin de programmer un micro-contrôleur. Bon, partant sur mes bases, j'ai débuté mon code, en faisant académiquement une segmentation de mon programme dans différents fichiers.
Je suis donc parti sur 3 fichiers :
- sources.ino qui servirait de code principal,
- constantes_et_VG.h et son .c associé :
.h) le .h servirait à définir les constantes et variables globales, ainsi que le prototype des fonctions du .c
.c) le .c contient pour l'instant une seule fonction qui met à jour les variables globales à partir des entrées du µC.
Pourtant, le codage à la mode programmation en C ne semble pas fonctionner.
J'ai déjà regardé les posts suivant
- Un post parlant de renommer les fichiers sources afin que l'IDE s'y compile dans le bon ordre . J'ai donc essayé de tester cette solution, j'ai renommer constantes_et_VG.c et *.h en xconstantes_et_VG.c et *.h, néanmoins, ça n'a pas eu d'effet.
- Un post parlant de déclarer toutes les variables globales dans le .ino et ensuite de les redéfinir dans les .h en plaçant extern devant. Néanmoins, le programme refuse toujours de compiler, mais cette fois à cause d'une double définition des variables globales.
Merci pour le coup de main, je vous joins ci dessous les codes sources et les messages d'erreurs du compilateur
//Fichier sources.c
#include "constantes_et_VG.h"
//////////////////////////////////////////////////////////
////////////////// DEBUT DU CODE ////////////////
//////////////////////////////////////////////////////////
void setup() {
// initialise le port série à 9600 bauds
Serial.begin(9600);
}
void loop() {
input_analog();// Fonction qui met a jour les variables globales
input_analog();
}
//Fichier constantes_et_VG.c
#include "Arduino.h"
#include "constantes_et_VG.h"
void input_analog()
{
Accx = GAIN_ACCELEROMETRE * (analogRead(BROCHE_ACCX) - TENSION_ACCELEROMETRE_ACCX0);
Accy = GAIN_ACCELEROMETRE * (analogRead(BROCHE_ACCY) - TENSION_ACCELEROMETRE_ACCY0);
t_micro = micros();
t_milli = millis();/* A priori, on n'aura pas besoin de cette valeur,
mais sait-on jamais, ça dépend pendant combien
de temps durera l'experience...*/
//
}
//Fichier constantes_et_VG.h
#ifndef CONSTANTES_ET_VG__H
#define CONSTANTES_ET_VG__H
///////////////////// Constantes////////////////////////
#define GAIN_ACCELEROMETRE 1
#define TENSION_ACCELEROMETRE_ACCX0 2.5
#define TENSION_ACCELEROMETRE_ACCY0 2.5
#define BROCHE_ACCX 0
#define BROCHE_ACCY 1
///////////////////////Variables globales/////////////////////
int Accx = 0;
int Accy = 0;
long int t_micro = 0;
long int t_milli = 0;
/////////////////////// Fonctions /////////////////////
void input_analog();
#endif
log du compilateur:
sources.cpp.o: In functionloop': /Applications/sources.ino:27: multiple definition of
Accx'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In functionloop': /Applications/sources.ino:27: multiple definition of
Accy'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In functionloop': /Applications/sources.ino:27: multiple definition of
t_micro'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In functionloop': /Applications/sources.ino:27: multiple definition of
t_milli'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In functionloop': sources.cpp:(.text.loop+0x0): undefined reference to
input_analog()'
sources.cpp:(.text.loop+0x4): undefined reference to `input_analog()'