SoftwareSerial et librairie externe

Bonjour à tous,

Je suis en train de coder une librairie pour récupérer les trames de teleinfo d'un compteur EDF.

en temps normal je mets au début du code :

SoftwareSerial cptSerial(2, 3);

et

cptSerial.begin(1200);

après j'ai une fonction :

read_teleinfo();

qui lit les trames reçus avec cptSerial.read().

Mais mon problème c'est que je ne sais pas comment faire passer la structure "cptSerial" à ma fonction?

Merci de votre aide.

Faire une classe teleInfo, dérivée de softwareSerial et qui assurera directement l'initialisation en appelant les méthodes de softwareSerial. Comme ça il n'y a rien à transmettre. Si tu as plusieurs compteurs (cas d'un producteur par exemple) il suffit d'instancier un nouvel objet teleInfo.

fdufnews:
Faire une classe teleInfo, dérivée de softwareSerial et qui assurera directement l'initialisation en appelant les méthodes de softwareSerial. Comme ça il n'y a rien à transmettre. Si tu as plusieurs compteurs (cas d'un producteur par exemple) il suffit d'instancier un nouvel objet teleInfo.

Oui mais le problème c'est que j'appel indéfiniment dans le loop la fonction read_teeleinfo() ... donc à chaque fois il va réinitialiser le port donc perte de temps, donc je vais louper des données ...

Je pense que le mieux c'est de le passer en argument non?

Je crois que tu n'as pas compris la réponse de fdufnews. A l'instanciation d'une librairie tu peux également instancier d'autre choses dérivant d'autre librairie. Grosso modo ça te donnerait :

#include <MalibTeleInfo.h>

MalibTeleInfo MonCompteur(2,3);

...

void loop() {

MonCompteur.readInfo(); // après je ne sais pas le type d'info retournée par le compteur à toi d'adapter

}

Et dans le .cpp, à la construction, tu instancies un SofwareSerial avec les pins passés en argument, et après quand tu fait ton read tu utilises ce SoftwareSerial, qui sera propre à chaque instanciation de MalibTeleInfo.

B@tto:
Je crois que tu n'as pas compris la réponse de fdufnews. A l'instanciation d'une librairie tu peux également instancier d'autre choses dérivant d'autre librairie. Grosso modo ça te donnerait :

#include <MalibTeleInfo.h>

MalibTeleInfo MonCompteur(2,3);

...

void loop() {

MonCompteur.readInfo(); // après je ne sais pas le type d'info retournée par le compteur à toi d'adapter

}




Et dans le .cpp, à la construction, tu instancies un SofwareSerial avec les pins passés en argument, et après quand tu fait ton read tu utilises ce SoftwareSerial, qui sera propre à chaque instanciation de MalibTeleInfo.

Ok, je vais essayer ça, mais j'ai jamais codé en Objet, mais c'est une bonne occasion de m'y mettre. Merci

C'est un excellent exercice, moi-même je ne suis pas à l'aise avec ce genre de sujet mais ça aide à bien comprendre les différents mécanisme mis en jeu. Le truc si tu ne veux pas trop galérer : commence très très simple. Oublie ton téléinfo et pour le moment essaye simplement de créer un softwareserial à partir de ta lib en création