Go Down

Topic: [résolu] Utilisation de <Servo.h> dans une librairie (Read 2 times) previous topic - next topic

roipoussiere

Apr 20, 2012, 07:48 pm Last Edit: May 21, 2012, 05:53 pm by youplop Reason: 1
Bonsoir à tous.
Pour un projet j'utilise la librairie Servo.h
J'arrive très bien à la manipuler avec un programme de test, seulement je développe mon projet sous la forme d'une librairie, et je n'arrive pas à utiliser <Servo.h> convenablement, mon servo est totalement inactif (sans mauvais jeux de mots :p ).

Voici comment j'utilise Servo.h dans ma lib, pouvez-vous me dire si un truc ne va pas?

MaLib.h :
Code: [Select]

#ifndef MaLib
#define MaLib
#include <Servo.h>
#define MIN_SERVO 81
#define MAX_SERVO 91

class MaClasse {
       public:
       ...
private:
       Servo servo;
       ...
};
#endif


MaLib.cpp

Code: [Select]

#include "MaLib.h"
Robot::Robot()
{
servo.attach(PIN_SERVO);
       ...
}

void Robot::commencer(void)
{
servo.write(MAX_SERVO);
delay(3000);
servo.write(MIN_SERVO);
delay(3000);
       ...
}


Merci à vous!
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

skizoh

Bonjour,

Il est difficile de te donner directement une réponse à mon avis, donne directement tout le contenu de ton .h et ton .CPP sinon impossible de dire en 4 5 lignes si le reste est juste, dans ce que tu nous montre bas.. pas grand chose à dire pas de faute apparente quoi..


Skizo ! !
Un tien vaux mieux que deux tu l'auras !

roipoussiere

Quote
donne directement tout le contenu de ton .h et ton .CPP


Hem...
Ca va peut-être poser problème, mon .h et mon .cpp font à eux seuls environ 1500 lignes de code :D

En corrigeant ce petit problème de servo je clôturerais la version beta de mon projet, que je développe depuis plusieurs mois... Pour vous dire un peu à quel point je suis impatient de trouver réponse à ce problème :)

De fait, je réserve une ??petite surprise?? à celui qui m'aidera à trouver une solution! :D

En attendant je vais créer une librairie contenant uniquement l'utilisation de Servo.h, pour voir si ça fonctionne.

Youp.
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

osaka

#3
Apr 23, 2012, 02:18 pm Last Edit: Apr 23, 2012, 02:28 pm by osaka Reason: 1
Essayes ça: #include "Servo.h"  .
Ici

Code: [Select]

Robot::Robot()
{
servo.attach(PIN_SERVO);
       ...
}


Tu es certain de ta constante "PIN_SERVO" ?
Elle est où ?
Peut être le mettre plutôt en paramètres constructeur non, c'est pas très dynamique sinon ?

Code: [Select]

Robot::Robot(byte pinServo)
{
servo.attach(pinServo);
       ...
}


Code: [Select]

Robot robert(PIN_SERVO);

roipoussiere

#4
Apr 23, 2012, 07:14 pm Last Edit: Apr 23, 2012, 07:16 pm by youplop Reason: 1
Merci Osaka, j'essaie ça dès que j'ai ma carte sous la main!
Je vous tient au courant :)

Au fait, pourquoi "Servo.h"? Les quotes ne sont pas réservées aux librairies que nous avons crées?

Youp
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

skywodd

Bonjour,

Tu peut utiliser n'importe quelle librairie dans une autre librairie ;)

Dans le .h :
tu inclut le .h de la lib servo

en private :
- tu déclare un objet Servo
- tu déclare tout tes variables

en public :
- tu déclare le prototypes de toute tes fonctions

Dans le .cpp
tu inclut ton .h

- dans ton constructeur : tu peut passer la broche du servo en paramètre, par convention on ne met aucune constante modifiable dans une classe.
Au pire tu rend l'argument optionnel, en fournissant une valeur par défaut dans le .h, et tu initialise tout ce qui doit être initialisé.
- tu implémente tes fonctions, et là tu peut utiliser ton objet servo comme tu veut
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

roipoussiere

Cool!
Et bien idem, j'essaierais tout ça dans quelques jours, là je n'ai pas mon petit bébé électronique à portée de main :p

Merci beaucoup! A+
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

skizoh

Bon courage si il ne te manque que sa ^^ le cadeau secret tu dira quand même ce que c'est aux autres non? :P

Skizo !
Un tien vaux mieux que deux tu l'auras !

roipoussiere

C'est un gros chèque :p

Plus sérieusement tu le sera bien assez tôt...
Enfin quand j'aurais résolu ce petit détail quoi, ça devrait pas tarder.

A+!
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

roipoussiere

#9
May 14, 2012, 12:26 am Last Edit: May 14, 2012, 04:11 pm by youplop Reason: 1
Salut à tous.
Bon j'ai un peu été stoppé net dans mes tests par un petit contre-temps, mais ouf, je reprends enfin ce soir :) .

Comme j'en avais l'intention, j'ai fais une petite librairie-test très minimale, qui contient tout juste ce qu'il faut pour tester mon servo.
Et bien ça n'a pas loupé, cette lib ne marche pas... Ce qui n'est pas une mauvaise nouvelle, au moins je sais d'où ça vient xD
Pourtant j'ai essayé de suivre vos conseils, promis!

Mais cette fois-ci comme c'est très léger je peux vous montrer mon code foireux :)

test.ino
Code: [Select]
#include <Servo.h>
#include <Testservo.h>

// définition des pins
#define PIN_SERVO 8

// positions du servo-moteur (en degrés)
#define MIN_SERVO 81
#define MAX_SERVO 91

Test servotest(PIN_SERVO); // contructeur

void setup() {}

void loop() {
  // la seule et unique fonction de ma lib, qui fait avancer le servo d'un point à un autre
  servotest.commencer(MIN_SERVO, MAX_SERVO);
}


Testservo.h
Code: [Select]
#ifndef Testservo
#define Testservo

#include <Servo.h>

#include "Arduino.h"

class Test {
public:
Test(int pin);
void commencer(int min, int max);

private:
Servo servo;
};

#endif


Testservo.cpp

Code: [Select]
#include <Testservo.h>

Test::Test(int pin)
{
   // on associe le servo au bon pin
   servo.attach(pin);
}

void Test::commencer(int min, int max)
{
   // avance jusqu'à la position minimale
   servo.write(min);
   delay(1000);

   // puis jusqu'à la position maximale
   servo.write(max);
   delay(1000);
}


Voila. Le servo de bouge pas d'un yota...
Alors où se  cache l'erreur dans mon code?

Merci à vous
Youp.

Edit : rectification du miss-copier-collé :)
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

fdufnews

Tu nous mets le code de Test.cpp, mais alors de deux choses l'une ou il est incomplet ou tu as oublié 2 ou 3 trucs.

Tu crée un objet Servo mais tu ne l'utilises pas.
Tu déclares Test() mais il n'y a aucun code associé.
Autre chose ta librairie utilise Servo ou elle est une surcouche à Servo. Dans le second cas il faudrait l'indiquer dans la déclaration de la classe Test.

barbudor

Effectivement, ton testservo.cpp est une copie du fichier H
Ce n'est pas comme cela.

tu devrais avoir quelque chose comme

Code: [Select]
#include "Arduino.h"
#include "Servo.h"
#include "Testservo.h"

public:

Test::Test(int pin)
{
// Mettre ici le code du constructeur
}

Test::commencer(int min, int max)
{
// mettre ici le code de commencer()
}
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

osaka

Yop yop,
Ça sent surtout le mauvais copié collé sur le forum ...  :smiley-sweat:
Toujours ce relire quand on a posté !  :smiley-mr-green:

roipoussiere

Quote
Yop yop,
Ça sent surtout le mauvais copié collé sur le forum ... 
Toujours ce relire quand on a posté ! 

En effet!  :smiley-mr-green:

Voici mon authentique .cpp :)

Code: [Select]
#include <Testservo.h>

Test::Test(int pin)
{
   // on associe le servo au bon pin
   servo.attach(pin);
}

void Test::commencer(int min, int max)
{
   // avance jusqu'à la position minimale
   servo.write(min);
   delay(1000);

   // puis jusqu'à la position maximale
   servo.write(max);
   delay(1000);
}


Désolé ^^
N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

fdufnews

Quote
Ça sent surtout le mauvais copié collé sur le forum ...



Go Up