Je rencontre un problème tout bête avec l'utilisation des classes en arduino.
J'ai décidé, parce que cela me paraissait logique et puis parce que j'ai définit les pinMode() dans le constructeur de la classe, d'instancier celle-ci dans le setup().
Sauf que bien évidemment, elles ne peuvent être par conséquent utilisés dans le loop().
Je me suis dit par la suite que j'allai bêtement déplacer leur déclaration en début de code, comme ça leur portée sera globale. Sauf que je fais appel au constructeur et donc à différents pinMode() à l'extérieur du setup().
Je n'arrive pas à trouver de solution. Ou peut-être qu'il ne faut tout simplement pas utiliser les pinMode() dans le constructeur et les définir avant?
tu as quoi comme message d'erreur à la compilation ?
Essai de faire un
#include "arduino.h"
ca inclut les trucs (constantes, déclarations...) du framework arduino, il est pas visible dans le sketch mais en fait est fait par défaut dans le "main"
Sauf erreur il n'y a pas de souci de compilation.
Les messages sont: MaClasse (ici f1 et f2) not declared in this scope dans le premier cas et du charabia interminable dans le deuxième. Le problème c'est que justement j'ai en arduino en quelque sorte deux main: loop() et setup().
J'ai trouvé une solution plus ou moins potable en séparant le constructeur des pinMode() que j'ai regroupé dans une fonction init().
//-----------------------------------------------------------
typedef unsigned const int pin;
class feu {
public:
feu(pin rouge,pin orange,pin vert);
void halt();
void go();
void init();
protected:
pin r; pin o;pin v;
};
feu::feu(pin rouge,pin orange,pin vert):r(rouge),o(orange),v(vert)
{};
void feu::halt()
{
digitalWrite(o,LOW);
//...
};
void feu::go()
{
//...
};
void feu::init()
{pinMode(r,OUTPUT);pinMode(o,OUTPUT);pinMode(v,OUTPUT);
digitalWrite(r,LOW);digitalWrite(o,HIGH;digitalWrite(v,HIGH);};
//---------------------------------------------------------------
feu f1(1,2,3)//pin à titre indicatif;
feu f2(4,5,6);
//---------------------------------------------------------------
void setup ()
{
f1.init();
f2.init();
};
void loop ()
{
f1.go();
delay(1000);
f1.halt();
delay(1000);
f2.go();
delay(1000);
f2.halt();
delay(1000);// les durées ne correspondent pas encore à l'exercice
}
C'est donc les lignes 31 et 32 qui me dérangent.
A la base mon constructeur était
Tu pourrais créer tes classes dans d'autres fichiers plutot que dans le corps du fichier principal Arduino (tu as l'air de connaitre le C++, donc créer ta classe dans un fichier .h et .cpp)
Je veux bien mais cela ne résout pas mon problème.
Celui-ci étant:
Où doit-on instancier les objets (ici feu f1 et f2) ?
En c++ classique cela s'effectue dans le main sauf qu'ici, je veux les initialiser dans le setup() et les utiliser dans le loop(), ce qui n'est pas possible de pars la protée de ces instances.
Je trouve un peu "moche" d'écrire ces déclarations à l'extérieur de toute fonction.
Ou alors la question pourrait être: Comment définir des objets dans le setup() de sorte qu'ils soient utilisables dans le loop() (portée générale)
Concrètement toi tu initialises tes objets dans quelle partie ?
C'est un des points 'faibles' du framework Arduino... il faut faire des variables globales
Par exemple :
#include "maClasse.h"
MonObjet objet(4,5); //un objet qui utilise des paramètres dans son constructeurs
void setup()
{
objet.initialisation(); //une méthode par exemple
}
void loop()
{
objet.action(3); //une autre méthode
}
Merci pour ta réponse.
Je vais donc me contenter de cette solution.
utilisation des classes c++ en arduino
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !