Problème découpage code A0 , A1 non declared dans le scope

Bonjour ,

J’ai procédé au découpage de mon code afin de le rendre plus agréable et plus facile a configurer mais je me trouve devant un problème .
J’ai crée mes fichier .h et .cpp mais quand je declare mes #define capteur A0 il me dit que A0 n’est pas declarer.

Apres plusieurs essais j’ai eu meme droit a un analogRead() non declarer

Est il possible que je ne puisse pas utilisé mes fonction en dehors du ino ?

/* ================== FICHIER DE CONFIGURATION CAPTEUR LUMINOSITE =================*/


//-------------- PIN CAPTEUR LUMINOSITE ----------
#define PIN_CAPTEUR_EST A1
#define PIN_CAPTEUR_MIDI A2
#define PIN_CAPTEUR_OUEST A3

//----------- CAPTEUR LUMINOSITE ---------------


enum {LEVANT,MIDI,COUCHANT,SOMBRE};

void ctrl_capteur_lumiere(int *pos_soleil, char mess_erreur[]);

message erreur :

Arduino : 1.8.5 (Linux), Carte : “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

In file included from sketch/capteur_luminosite.cpp:3:0:
sketch/capteur_luminosite.cpp: In function ‘void ctrl_capteur_lumiere(int*, char*)’:
capteur_luminosite.h:5: error: ‘A1’ was not declared in this scope
#define PIN_CAPTEUR_EST A1
^
sketch/capteur_luminosite.cpp:8:19: note: in expansion of macro ‘PIN_CAPTEUR_EST’
if(analogRead(PIN_CAPTEUR_EST)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_MIDI)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_OUEST)<SEUIL_LUMIERE)
^
capteur_luminosite.cpp:8: error: ‘analogRead’ was not declared in this scope
if(analogRead(PIN_CAPTEUR_EST)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_MIDI)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_OUEST)<SEUIL_LUMIERE)
^
capteur_luminosite.cpp:8: error: ‘SEUIL_LUMIERE’ was not declared in this scope
if(analogRead(PIN_CAPTEUR_EST)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_MIDI)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_OUEST)<SEUIL_LUMIERE)
^
In file included from sketch/capteur_luminosite.cpp:3:0:
capteur_luminosite.h:6: error: ‘A2’ was not declared in this scope
#define PIN_CAPTEUR_MIDI A2
^
sketch/capteur_luminosite.cpp:8:64: note: in expansion of macro ‘PIN_CAPTEUR_MIDI’
if(analogRead(PIN_CAPTEUR_EST)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_MIDI)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_OUEST)<SEUIL_LUMIERE)
^
capteur_luminosite.h:7: error: ‘A3’ was not declared in this scope
#define PIN_CAPTEUR_OUEST A3
^
sketch/capteur_luminosite.cpp:8:110: note: in expansion of macro ‘PIN_CAPTEUR_OUEST’
if(analogRead(PIN_CAPTEUR_EST)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_MIDI)<SEUIL_LUMIERE && analogRead(PIN_CAPTEUR_OUEST)<SEUIL_LUMIERE)
^
exit status 1
‘A1’ was not declared in this scope

Ce rapport pourrait être plus détaillé avec
l’option “Afficher les résultats détaillés de la compilation”
activée dans Fichier → Préférences.

merci

Bonsoir

""Ce rapport pourrait être plus détaillé avec l'option "Afficher les résultats détaillés de la compilation" activée dans Fichier -> Préférences.""

Transmettez le code et les message d'erreur en intégralité s.v.p.

Cordialement, bidouilleelec

Bonjour,

Il faut inclure le fichier Arduino.h pour utiliser les définitions arduino (en dehors d’un fichier .ino)

#include <Arduino.h>

Essaye d’ajouter la ligne :
#include<Arduino.h>

Et profites-en pour en lire le contenu dans le répertoire qui contient l’IDE.

  1. A0 est une dénomination Wiring/Arduino, cela n’a rien à voir avec le langage C/Cpp
  2. Quand tu découpe ton programme comme tu le fais en fichiers séparés chaque fichier est compilé séparément.
    Dans tous les fichiers cpp il faut donner tous les renseignements au compilateur, sinon il hurle dès qu’il trouve dans le code “un machin” dont personne lui a parlé avant qu’il le trouve.

Le fichier Arduino.h apporte toute une série de définitions et de déclarations, il inclu aussi le fichier pin_arduino.h dans lequel A0 est défini.

Tu n’as pas à l’inclure dans un fichier *.ino parce que c’est l’IDE qui le fait pour toi quand elle transforme le fichier *.ino en un vrai fichier *.cpp avant de l’envoyer au compilateur.

Le mieux serait que tu lise un tuto de C/Cpp d’initiation à la programmation en fichiers séparés car il y a aussi des choses à connaître avec les variables globales.

Localisation pour consulter le contenu des fichiers :
Arduino.h :
arduino-1.8.7/hardware/arduino/avr/cores/arduino/Arduino.h
pin_arduino.h
Pour la carte Mega :
arduino-1.8.7/hardware/arduino/avr/variants/mega/pin_arduino.h

68tjs:
Essaye d’ajouter la ligne :
#include<Arduino.h>

Et profites-en pour en lire le contenu dans le répertoire qui contient l’IDE.

  1. A0 est une dénomination Wiring/Arduino, cela n’a rien à voir avec le langage C/Cpp
  2. Quand tu découpe ton programme comme tu le fais en fichiers séparés chaque fichier est compilé séparément.
    Dans tous les fichiers cpp il faut donner tous les renseignements au compilateur, sinon il hurle dès qu’il trouve dans le code “un machin” dont personne lui a parlé avant qu’il le trouve.

Le fichier Arduino.h apporte toute une série de définitions et de déclarations, il inclu aussi le fichier pin_arduino.h dans lequel A0 est défini.

Tu n’as pas à l’inclure dans un fichier *.ino parce que c’est l’IDE qui le fait pour toi quand elle transforme le fichier *.ino en un vrai fichier *.cpp avant de l’envoyer au compilateur.

Le mieux serait que tu lise un tuto de C/Cpp d’initiation à la programmation en fichiers séparés car il y a aussi des choses à connaître avec les variables globales.

Localisation pour consulter le contenu des fichiers :
Arduino.h :
arduino-1.8.7/hardware/arduino/avr/cores/arduino/Arduino.h
pin_arduino.h
Pour la carte Mega :
arduino-1.8.7/hardware/arduino/avr/variants/mega/pin_arduino.h

Merci pour ces renseignements je vais me replongé dans la découpe des fichiers , jusqu’à présent je n’avais pas découper de programme pour arduino.

je n’ai pas essayé mais c’est très logique " du coup ma question semble bête"

J’essais dans la mesure du possible d’éviter les variables globales je préfère les "define"et quelques “enum” pour facilité la vie , tout comme je préfère les pointeurs ça prend moins de place en mémoire et c’est plus rapide
c’est surtout aussi que j’essai même si cela n’est pas nécessaire d’optimisé mon code

merci