c'est quoi la fonction « _GLOBAL__sub_D_xxx »: ?


bonjour à tous,

mon souci est le suivant :

dans le cadre d'un projet de validation de mon bts je dois programmer une partie d'une maquette qui fonctionnera à base de carte arduino mega 2560 (le projet doit être en langage objet c'est imposé, donc avec des classes ).

j'ai un message d'erreur que je ne comprend pas même après quelques recherches et je commence à être court en délai donc je m'adresse à vous en espérant que je serai débloqué.

je réalise le code qui me permettra de contrôler les rotations d'un plateau qui sera fixé sur un moteur pas à pas. donc je contrôle effectivement le plateau quand je code avec les standards d'arduino? par contre en passant en langage objet j'obtiens quelques erreurs :

code: [select]

moteurduplateau.cpp.o: dans la fonction « _global__sub_d_stepdelay »:
/usr/share/arduino/moteurplateau.ino:14: définitions multiples de « retourplateau »
moteurplateau.cpp.o:moteurplateau.cpp:34: défini pour la première fois ici
/usr/lib/gcc/avr/4.8.2/../../../avr/bin/ld: désactivation de la relâche: il ne pourra pas travailler avec des définitions multiples
moteurduplateau.cpp.o: dans la fonction « _global__sub_d_stepdelay »:
/usr/share/arduino/moteurplateau.ino:14: définitions multiples de « nbpas »
moteurplateau.cpp.o:moteurplateau.cpp:34: défini pour la première fois ici
moteurduplateau.cpp.o: dans la fonction « _global__sub_d_stepdelay »:
/usr/share/arduino/moteurplateau.ino:14: définitions multiples de « stepdelay »
moteurplateau.cpp.o:moteurplateau.cpp:34: défini pour la première fois ici
collect2: error: ld returned 1 exit status


voici le code de mon .cpp :

code: [select]



#include "moteurplateau.h"


// constructeur de la classe
moteurplateau::moteurplateau()
{
  retourplateau = 24;
}

//destructeur
moteurplateau::~moteurplateau()
{

}

//methode privées

//initialisation des broches en mode sortie
void moteurplateau::initialisermoteurplateau(){
  pinmode(dir_a,output);
  pinmode(dir_b,output);
  pinmode(pwm_a,output);
  pinmode(pwm_b,output);
}

// méthodes publiques

void moteurplateau::retournerplateau(){
  setnbpas(24);
  // consiste à appeller la méthode actionnerplateau() avec un pas de 24
 
  actionnerplateau(nbpas_);
}


void moteurplateau::stopperplateau(){
  digitalwrite(pwm_a,low);
  digitalwrite(pwm_b,low);
  digitalwrite(dir_a,low);
  digitalwrite(dir_b,low);
}

void moteurplateau::actionnerplateau(int nbpas) // actionne le plateau dans le sens anti-horaire
{

  nbpas = 200;
  //setnbplateau(nbpas_);

  // function run amount of times called in method.
  // accomplished while loop, subtract 1 amount, after every run.

  while(nbpas_!=0){

    // starting position (if repeated, ful step (4))
    // explination: in case, both our power high.
    // therefore both coils activated, standard polarities magnetic fields.
    digitalwrite(pwm_a,high);
    digitalwrite(pwm_b,high);
    digitalwrite(dir_a,high);
    digitalwrite(dir_b,high);

    delaymicroseconds(stepdelay);

    //half step (½)
    // explination: in case, out b-coil active, still it's stand polarity.
    digitalwrite(pwm_a,high);
    digitalwrite(pwm_b,low);
    digitalwrite(dir_a,high);
    digitalwrite(dir_b,low);

    delaymicroseconds(stepdelay);

    //full step (1)
    // explination: in case, b-coil activated in previous cases.
    // a-coil has it's direction turned on. it's active, reversered polarity.
    // continuing pattern (for reference: http://www.8051projects.net/stepper-motor-interfacing/full-step.gif) , you'll axis turn.
    digitalwrite(pwm_a,high);
    digitalwrite(pwm_b,high);
    digitalwrite(dir_a,high);
    digitalwrite(dir_b,low);

    delaymicroseconds(stepdelay);

    // half step (1½)
    digitalwrite(pwm_a,low);
    digitalwrite(pwm_b,high);
    digitalwrite(dir_a,low);
    digitalwrite(dir_b,low);

    delaymicroseconds(stepdelay);

    // full step (2)
    digitalwrite(pwm_a,high);
    digitalwrite(pwm_b,high);
    digitalwrite(dir_a,low);
    digitalwrite(dir_b,low);

    delaymicroseconds(stepdelay);

    // half step (2½)
    digitalwrite(pwm_a,high);
    digitalwrite(pwm_b,low);
    digitalwrite(dir_a,low);
    digitalwrite(dir_b,low);

    delaymicroseconds(stepdelay);

    // full step (3)
    digitalwrite(pwm_a,high);
    digitalwrite(pwm_b,high);
    digitalwrite(dir_a,low);
    digitalwrite(dir_b,high);

    delaymicroseconds(stepdelay);

    // half step (3½)
    digitalwrite(pwm_a,low);
    digitalwrite(pwm_b,high);
    digitalwrite(dir_a,low);
    digitalwrite(dir_b,high);

    nbpas--;


  }

}



comme je l'ai précisé si je m'abstiens de créer des classes et que je code de façon classique donc juste un void setup() et un void loop() ça fonctionne au poil. donc pour moi même si le code de ma méthode actionnerplateau n'est pas optimisé il est correct. mais je ne vois pas d'où peuvent venir les messages d'erreur que j'obtiens.

est-ce que quelqu'un peut m'éclaircir un peu les idées surtout sur la signification du : « _global__sub_d_xxx » ?

merci d'avance pour votre aide.

le .h c'est bien aussi :)


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > c'est quoi la fonction « _GLOBAL__sub_D_xxx »: ?


arduino

Comments