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:
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:
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:
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:
Citation:
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 ?