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 ?