Serial.begin() dans une biliothèque

Salut à tous, et encore une fois bonnes fêtes :slight_smile:

Je suis en train de réaliser une biblio qui doit communiquer via le port série.
J'ai fait un Serial.begin(); dans le setup de mon .pde et jusque là tout va bien.
J'aimerais maintenant utiliser le port série dans le constructeur de ma fonction.
Seulement ça ne marche pas car j'appelle mon constructeur avant le Serial.begin();

Un joli exemple pour expliquer mes explications pas très explicites:

Biblio.h :

#include "WProgram.h"
#include "Biblio.h"
Bidule::Bidule() {
  Serial.println("bonne année");
}
Bidule::methode1() {
  Serial.println("joyeux nowel");
}

test.pde :

#include <Biblio.h>

Bidule toto();

void setup() {
  Serial.begin(9600);
  toto.methode1();
}
void loop() { while(1) {} }

J'ai pas testé ça, il manque peut-être des trucs mais globalement c'est le principe.
Cela affiche uniquement joyeux nowel.

Ne rien faire dans le constructeur.
Créer un Bidule::begin() dans lequel tu mets ton premier message.
Le Bidule::begin() étant appelé dans le setup du programme après le Serial.begin().

Salut,

Pourquoi ne pas faire :

Bidule::Bidule(unsigned int speed) {
  Serial.begin(speed);
  Serial.println("bonne année");
}
void Bidule::methode1() {
  Serial.println("joyeux nowel");
}
#include <Biblio.h>

Bidule toto(9600);

void setup() {
  toto.methode1();
}
void loop() { }

Ne rien faire dans le constructeur.

Pourquoi? :stuck_out_tongue:
Je débute un peu en poo, en fait le constructeur est réservé à quel usage?

Skywodd, décidément t'es partout :slight_smile:
Je n'ai pas mon pc sur place pour tester exactement ton code, mais il me semblait que dans ce cas le port série était accessible uniquement dans le constructeur, donc inutilisable dans mehode1.
Je suppose qu'il n'est pas obligatoire de mettre la vitesse du port série en entrée du constructeur, on peut écrire directement Serial.begin(9600) ?
Ceci dit si ça marche c'est cool car cela m'intéresse de ne pas avoir à faire le serial.begin() dans mon fichier pde.
Je vous tiens au courant, je pourrais faire les tests demain soir.

Youp.

youplop:
Pourquoi? :stuck_out_tongue:
Je débute un peu en poo, en fait le constructeur est réservé à quel usage?

Le constructeur est réservé à l'initialisation/configuration des variables interne à la class et aux différentes allocation si besoin.

youplop:
Skywodd, décidément t'es partout :slight_smile:

Normal je suis un ninza :grin:

youplop:
Je n'ai pas mon pc sur place pour tester exactement ton code, mais il me semblait que dans ce cas le port série était accessible uniquement dans le constructeur, donc inutilisable dans mehode1.

Serial est accessible en tant que variable global donc dans le constructeur et dans les fonctions de la classe sans différence.

youplop:
Je suppose qu'il n'est pas obligatoire de mettre la vitesse du port série en entrée du constructeur, on peut écrire directement Serial.begin(9600) ?

Oui sans probléme :wink: