Pages: [1] 2   Go Down
Author Topic: [Résolu] Comment utiliser un "String" comme membre de servo?  (Read 1474 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous et à toutes  smiley-razz

Je viens ici chercher une aide à mon problème... pour lequel je tourne en rond d'erreurs en erreurs !


J'ai créé une fonction qui doit reprendre le nom d'un servo à commander ainsi que la valeur de l'angle.
Le code suivant me renvoi une erreur de type :
Quote
'class String' has no member named 'writeMicroseconds'

Code:
void loop(){
    .../...
    if (digitalRead(In_BP4)==APPUI) {
        --AngleServoMain_Ref;
        Fct_MajServo ("ServoMain", AngleServoMain_Ref);
    }
    .../...
}
void Fct_MajServo (string NomServo, int ValeurAngle) {  //--- fonction calibrage impulsion servomoteur à partir valeur angle en degrés

constrain(ValeurAngle,0,180);
//int impuls=0;
        impuls=map(ValeurAngle,ANGLE_MIN,ANGLE_MAX,POS_MIN, POS_MAX);

NomServo.writeMicroseconds(impuls); // crée impulsion à partir valeur angle - plus précis que write()
delay(10);

//int angle(int valeur_angle) {
//int impuls=0;
         //impuls=map(valeur_angle,ANGLE_MIN,ANGLE_MAX,POS_MIN, POS_MAX);
         //return impuls;  
//}

} //--- fin fonction calibrage
.

J'ai essayé avec char*[] et autres fonctions, j'ai systématiquement une erreur.
Il y a quelquechose que j'ai loupé, mais quoi?

Merci de votre aide.

Cordialement, B3
« Last Edit: July 28, 2012, 08:46:28 am by babyboombros » Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as loupé le cours sur les classes dérivées.

NomServo est de type class String

WriteMicroseconds est un membre de la classe Servo

Crée une classe MonServo dérivée de Servo et qui ajoute un membre String NomServo

Logged

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci de ton aide barbudor.

Je vais chercher dans ce sens.

Cordialement,

[Edit]
Je ne trouve rien de bien précis en rapport avec Arduino... Tu as une piste, un lien à me fournir?
Car je débute dans le C++ et cela fait parti des éléments que je n'ai pas encore abordé !
[/Edit]
« Last Edit: July 28, 2012, 06:05:20 am by babyboombros » Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca n'a rien de spécifique Arduino
Concept de base C++
Genre (a affiner, ceci est juste une base) :

Code:
class MonServo : public Servo
{
  public:
  String Name
}


Logged

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, je vois qu'il va falloir faire un tour complet du C++, afin d'alléger mon programme avec ce genre de "subtilités"  !

Merci encore.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

[Résolu]
Mon problème est passé en enlevant les guillemets lors de l'appel de ma fonction!!
En effet, ServoMain est déclaré dans la classe servo au début du programme.
Donc, pas besoin de faire une classe dérivée.

A ce sujet, j'ai lu un tuto (notamment sur le site du zéro), mais j'avoue ne pas savoir comment l'appliquer à mon programme.
Heureusement, car je n'ai pas compris grand chose !!!

Merci quand même à Barbudor pour la piste que tu m'as donné. L'héritage des classe permet de faire plein de chose... A voir de près en espérant y comprendre quelquechose lol
[/Résolu]
« Last Edit: July 28, 2012, 08:48:10 am by babyboombros » Logged

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Petit rappel : Les questions et interrogations quelconques n'ont rien à faire dans les catégories, ils sont à positionner à la racine du forum.

Cette règle doit absolument être respectée sous peine de foutoir absolu...

De plus, cela évite du travail inutile à notre modo préferé (Le présent sujet sera déplacé sous peu).

(D'ailleurs, je suis outré que l'on puisse répondre à des problématiques qui ne sont pas dans les bonnes cases, Barbudor : -1 smiley-mr-green )

@+

Zoroastre.
« Last Edit: July 28, 2012, 03:46:19 pm by zoroastre » Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je te remercie de ton intervention désobligeante et non constructive.

C'est ce genre de réactions qui font que je m'adresse à des forums que par nécessités... Choses relativement rares!

Pour ton information, dès mon post, je me suis aperçu de ma boulette, et contacter le modo par MP en m'excusant et lui demandant d'intervenir pour déplacer mon post!

Heureusement que des personnes comme barbudor sont plus indulgents et permettent elles de faire vivre des forums, car les gens sont "bien reçu" et/ou "bien renseigné", sans quoi je me demande à quoi serviraient les forums si ce n'est à discuter entre personnes hautement qualifiées... ce qui est loin d'être mon cas.

barbudor +100, balle au centre!
Logged

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

Je ne vois pas en quoi mon intervention fût "désobligeante et non constructive", c'est d'ailleurs l'hôpital qui se fout de la charité car tu es parfaitement conscient que tu donnes du boulot supplémentaire aux modérateurs et aux personnes qui tentent de maintenir un site/forum agréable.

Quote
C'est ce genre de réactions qui font que je m'adresse à des forums que par nécessités
Si tu ne veux pas succiter ce "genre de réactions", apprend à lire les règlements et à utiliser correctement un forum, chose que tu ne sais pas faire ou que tu ne veux pas faire apparement.
Lorsque que l'on pénètre un espace dont on ne connait pas les us et coutumes, il est courant d'en apprendre un peu avant d'échanger, cela s'appelle de la courtoisie d'ailleurs, et les individus qui jètent leur sujet un peu n'importe comment, n'importe où, sont des pollueurs, point final.

Le présent sujet a débuté poliement et fût bien décrit et résolu in fine, je n'ai donc rien à dire de ce côté là, Je reconnais bien aussi l'altruisme altier de notre ami Barbudor et suis simplement au regret qu'il ajoute de l'eau à un moulin qui n'est pas dans la bonne rivière.

L'envie d'aider, ne doit pas céder à la sensiblerie. Il y a un règlement, respectons le :
http://arduino.cc/forum/index.php/topic,102175.0.html

@+

Zoroastre.
« Last Edit: July 29, 2012, 01:18:37 am by zoroastre » Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

(D'ailleurs, je suis outré que l'on puisse répondre à des problématiques qui ne sont pas dans les bonnes cases, Barbudor : -1 smiley-mr-green )

Mais qu'est-ce que j'ai fait moi  smiley-cry
La plupart du temps je répond aux topics qui apparaissent via un mail de notification, sans faire gaffe où ils se trouvent.
Puisque c'est ca, je retourne à la piscine et je vous laisse tous à vos problème de classes dérivée, fonctions membres et surcharges et patati patata. En cas de problème avec le C++, merci de vous adresser directement à Bjarne Stroustrup, ca fera gagner du temps à tout le monde.  smiley-grin
Logged

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 ?

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne peux qu'être du même avis que zoro qui a juste fais un rappel et qui je pense s'en serait passer volontiers, il ne faut pas y voir d'action malveillante ce n'est pas son but et il ne pouvait deviner que la modération avait déjà été prévenue de l'erreur.
Maintenant s'il y a un règlement ce n'est pas par plaisir de sanctionner, sermonner ou autre mais plutôt une nécessité afin d'avoir un forum claire et agréable à parcourir pour tous.
Ici je crois bien que c'est l'un des forum les plus tolérant et respectueux que j'ai vu et rencontrer (même trop à mon gout  smiley-mr-green), il y a juste des limites, les règles il y a partout (conduire, travailler, etc) il suffit de les connaître et respecter et tout ira pour le meilleur des mondes (l'erreur est permise également).

(D'ailleurs, je suis outré que l'on puisse répondre à des problématiques qui ne sont pas dans les bonnes cases, Barbudor : -1 smiley-mr-green )

Mais qu'est-ce que j'ai fait moi  smiley-cry
La plupart du temps je répond aux topics qui apparaissent via un mail de notification, sans faire gaffe où ils se trouvent.

Barbu c'est non volontaire évidement mais en répondant trop précipitamment tu valides en quelque sorte le non respect de la charte et règlement.
Logged


France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

On reste calme svp, J-F est en vacance laissons le en profiter.
Il a bien le droit de prendre une petite pause vu le temps qu'il passe à gérer nos conneries smiley-wink

Pour ton information, dès mon post, je me suis aperçu de ma boulette, et contacter le modo par MP en m'excusant et lui demandant d'intervenir pour déplacer mon post!
Dans ce genre de cas (ça arrive à tout le monde de faire des erreurs) il suffit :
- d'éditer ton message pour récupérer le texte,
- supprimer ton topic mal placé en supprimant ton 1er message,
- ouvrir un nouveau topic avec ton texte en copier/coller au bon endroit
Cela évite du travail inutile aux modérateurs smiley-wink

Heureusement que des personnes comme barbudor sont plus indulgents et permettent elles de faire vivre des forums, car les gens sont "bien reçu" et/ou "bien renseigné", sans quoi je me demande à quoi serviraient les forums si ce n'est à discuter entre personnes hautement qualifiées... ce qui est loin d'être mon cas.
Ce n'est pas pour autant qu'il faut laisser de côté les règles établit smiley-wink
Elles ont été discuté longuement (trés longuement même) avec les membres du forum, afin justement d'éviter d'avoir à faire ce genre de rappel.
On passe ainsi moins de temps à faire la police et plus de temps à répondre aux questions / problémes.
Chaque membre du forum ce doit de veiller au bon fonctionnement du forum, sinon ça s'appelle un SAV smiley-wink

Ici je crois bien que c'est l'un des forum les plus tolérant et respectueux que j'ai vu et rencontrer (même trop à mon gout  smiley-mr-green), il y a juste des limites, les règles il y a partout (conduire, travailler, etc) il suffit de les connaître et respecter et tout ira pour le meilleur des mondes (l'erreur est permise également).
Les modo/admin d'arduino.cc sont trés (trop ?) tolérant smiley-mr-green
Il me semble (de mémoire) qu'il est impossible de ce faire bannir sauf en cas de comportement vraiment trés grave.
C'est un des rares forums ou tu ne verra jamais quelqu'un répondre "tient le noob, va donc voir sur google".
Ici que tu soit débutant, grand débutant ou utilisateur confirmé / expert tu est traité de la même façon smiley-wink

--

Revenons à ton probléme.

A tu trouvais une solution ?
Si oui laquelle (que cela profite aux prochaines personnes qui passeront sur ce topic) ?

Tu dis :
Quote
Mon problème est passé en enlevant les guillemets lors de l'appel de ma fonction!!

Je suppose donc que ta fonction prend désormais en argument un objet de type Servo ?
Si oui est ce que tu passe cette objet par copie, par pointeur ou par référence ?
Selon le type de passage d'argument de ta fonction tu peut avoir des problémes par la suite.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

0
Offline Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep!

J'ai peut être été un peu virulent dans ma remarque précedente.

J'ai eu quelques mots avec babyboombros en private et la polémique est aujourd'hui éteinte.

Osaka a parfaitement résumé la situation. Le fond doit être cohérent avec la forme sinon nous dérivons vers le non-sens et le foutoir absolu.

babyboombros a peut être lancé son sujet un peu précipitement, mais je le crois lorsqu'il s'en excuse et affirme qu'il a prévenu le modo de sa bévue.

J'ai d'ailleurs loué l'altruisme altier de barbudor et l'en félicite en quelque sorte. Mais il faut également être conscient que la vie du forum, ce sont ces membres les plus assidus, le noyau dur, dont barbudor fait aujourd'hui fièrement partie, qui la font grandir et évoluer dans le bon sens. Et c'est de notre responsabilité à chacun d'écouter et de faire respecter les règles de notre belle communauté.
D'ailleurs, ces règles ne sont pas figées, elles sont le consensus de nos idéaux...

@+

Zoroastre.
Logged

Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message smiley-wink

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir à tous,

Quote
Dans ce genre de cas (ça arrive à tout le monde de faire des erreurs) il suffit :
- d'éditer ton message pour récupérer le texte,
- supprimer ton topic mal placé en supprimant ton 1er message,
- ouvrir un nouveau topic avec ton texte en copier/coller au bon endroit
Cela évite du travail inutile aux modérateurs
Merci pour l'info, je ne savais pas qu'il était possible de faire ce genre de manip, d'où mon MP au modo.

Quote
Je suppose donc que ta fonction prend désormais en argument un objet de type Servo ?
En fait oui, mon objet est de type servo et déclaré comme tel au début du programme, avant le setup()

Quote
Selon le type de passage d'argument de ta fonction tu peut avoir des problémes par la suite.
Pour moi , cela reste encore du domaine du charabia, je sais juste que j'ai enlevé les guillemets qui encadrent ServoMain.
Mon appel de la fonction initiale
Code:
Fct_MajServo ("ServoMain", AngleServoMain_Ref);

Mon appel de la fonction finale
Code:
Fct_MajServo (ServoMain, AngleServoMain_Ref);

Quote
Selon le type de passage d'argument de ta fonction tu peut avoir des problémes par la suite.
Quels types de problèmes? il me faut alors dores et déjà y rechercher des solutions lol
« Last Edit: July 29, 2012, 12:43:32 pm by babyboombros » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait si tu passe ton objet Servo par copie (ce qui semble être le cas) tu as une copie de l'objet qui est faite (logique ...).
Ça demande beaucoup de travail pour faire la copie.

Le mieux est de passer ton objet Servo par pointeur :
Prototype de la fonction (par exemple) :
Code:
void Fct_MajServo(Servo *myServo, int angle);
(bien remarquer le * devant le nom de l'objet myServo)

Appel la fonction via :
Code:
Fct_MajServo(&ServoMain, AngleServoMain_Ref);
(bien remarquer le & devant le nom de l'objet Servo)

Par contre dans le code de ta fonction il te faudra utiliser -> et non . pour accéder aux membres de ton objet Servo.
Exemple :
Code:
myServo->writeMicroseconds(impuls);

Une autre solution valable uniquement en C++ est le passage par référence.
C'est le même principe que le passage par pointeur mais sans pointeur et sans copie smiley-mr-green

Prototype de la fonction (par exemple) :
Code:
void Fct_MajServo(Servo &myServo, int angle);
(bien remarquer le & devant le nom de l'objet myServo)

Pour ce qui est de l'appel de la fonction, ou l'utilisation de l'objet Servo dans le corps de ta fonction, c'est exactement comme un passage par copie.
-> Simplicité du passage par copie + rapidité du passage par pointeur
Attention : comme avec le passage par pointeur toute modification sur l'objet Servo à l'intérieur de ta fonction se répercutera sur l'objet Servo d'origine.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1] 2   Go Up
Jump to: