IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

problème d'acces aux attributs d'un objet [arduino].


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut problème d'acces aux attributs d'un objet [arduino].
    Salut les cpp,
    Je ne connais absolument rien au langage cpp mais j'ai une petite expérience du langage C et arduino.

    Dans le bouquin que je suis en train de lire, j'ai découvert que les librairies arduino sont écrite en cpp et un exemple y est donner comment en fabriquer une.
    J'ai bien sur foncer tête baisser a me fabriquer une librairie qui peut faire luire maximum 7 LED dans toutes les possibilités: pow(2,7) codé dans un tableau de bit, chaque bit représentant l'état d'une LED.

    Voici le fichier *.h de la librairie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include "Arduino.h"
     
    class Blinker {
      public:
        Blinker(byte pins[],byte pins_number) ;
        void blinking(unsigned int duree,boolean reversed) ;
      private:
        byte _c ;
        byte _cc ;
        byte _number_of_LED  ;
        byte _pins[] ;
        byte _total_possibilities ;
        byte _table[][255] ;
     
    } ;
    Et voici le fichier *.cpp:
    Ne vous inquiétez pas si des méthodes vous sont inconnues c'est de l'arduino.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    #include "Arduino.h"
    #include "Blinker.h"
     
    Blinker::Blinker(byte pins[],byte pins_number) {
      byte _c ;
      byte _number_of_LED = pins_number ;
     
      byte _pins[pins_number]  ;
      for (_c=0 ; _c < _number_of_LED ; _c++) {
        _pins[_c] = pins[_c] ;
      }
     
      for( _c=0 ; _c < _number_of_LED ; _c++) {
        pinMode(pins[_c],OUTPUT) ;
      }
     
      byte _total_possibilities ;
     
      _total_possibilities = byte(pow(2,_number_of_LED)) ; // pow(2,7) return 127 instead of 128 another mystery of arduino...
      _total_possibilities++ ;
     
      // [DEBUG : Serial.print(_total_possibilities) ; 
      // [DEBUG : Serial.println() ;
     
      byte _table[_total_possibilities][_number_of_LED] ;
      for (_c=0 ; _c < _total_possibilities ; _c++) {
        byte _cc ;
        byte _value_to_bin=_c ;
        for (_cc=0 ; _cc < _number_of_LED ; _cc++) {
          _table[_c][_cc]=_value_to_bin % 2 ;
          _value_to_bin /= 2 ;
          // [DEBUG : Serial.print(_table[c][cc]) ;
        }
        // [DEBUG : Serial.println() ;
      }
     
    }
     
    void Blinker::blinking(unsigned int duree,boolean reversed) {
     
      // [DEBUG : Serial.print(total_possibilities) ;
      //          Here i get the value 0 instead of the pow() computed value from the constructor
      // [DEBUG : Serial.println() ;
     
      if ( ! reversed) {
        for (byte _c = 0 ; _c < _total_possibilities ; _c++) {
          for(byte _cc=0 ; _cc < _number_of_LED ; _cc++ ) {
     
    	if ( _table[_c][_cc] == 1 ) {
    	  //digitalWrite(_pins[_cc],HIGH) ;
    	  ;
    	}
    	Serial.print(_table[_c][_cc]) ;
          }
          Serial.println() ;
          delay(duree) ;
          //_init_LED() ;
        }
      }
      else {
        for (byte _c = _total_possibilities-1 ; _c >=0  ; _c++) {
          for(byte _cc=0 ; _cc < _number_of_LED ; _cc++ ) {
     
    	if ( _table[_c][_cc] == 1 ) {
    	  //digitalWrite(_pins[_cc],HIGH) ;
    	  ;
    	}
    	Serial.print(_table[_c][_cc]) ;
          }
          Serial.println() ;
          delay(duree) ;
          //_init_LED() ;
        }
      }
    }
    Le problème étant que quand j'instancie, de part le constructeur, l'objet de la librairie les attributs ne sont pas enregistrer quand j'appelle une autre méthode.

    Le plus embêtant étant que j'ai copier l'exemple du bouquin, suite a ce problème afin d'en avoir le cœur net et j'ai le même problème et donc ça ne fonctionne pas non plus...

    Le problème ne vient pas des attributs privées ou publique, j'ai déjà chercher dans cette direction.

    Si le code vous semble correcte il est possible que le problème vienne de mon code arduino que je vous copie de tête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include "Blinker.h"
     
    byte LEDS[3]={1,2,4} ;
    Blinker blinks(LEDS, 3) ;
     
    void setup() {
      Serial.begin(9600) ;
    }
     
    void loop() {
      if (Serial.available() > 0) {
      blinks.blinking(500,false) ;
      }
    }
    Merci pour vos réponses éclairés, dans le but de connaître la cause, de la non accessibilité d'une variable initialiser dans le constructeur ( _total_possibilities et _number_of_LED en particulier ) depuis une autre méthode de l'objet.

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Coucou !

    Un post court pour dire : cpp c'est "plutôt" associé au préprocesseur ! (celui qui réagit aux #define, etc...)
    Essaye de garder "cpp" pour préproc, et "c++"... bah pour le C++ !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Que fait l'appel commenté à digitalWrite() ?

    Aussi, j'ai des doutes quant à ton appel à available().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Je déplace sur le forum C++ s'il s'agit de C++.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    j'ai des doutes quant à tes syntaxes du types var[]. Surtout pour des membres.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    bonsoir,

    et si dans ton constructeur tu remplaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte _number_of_LED = pins_number ;
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _number_of_LED = pins_number ;
    Tu es sûr que _c et _cc sont des données membres de la classe ? Ce sont de simples compteurs,non?

  7. #7
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Je ne connais pas du tout le c++,
    J'ai un doute aussi sur le tableau passer en paramètre, c'est une piste.
    Effectivement _c et _cc sont de simple compteur je peut donc les définir comme ??? pas comme membre, a revoir de ma part.
    Les fonctions commenter (comme par exemple Digitalwrite(port,état) qui permet d'allumer ou d'éteindre un port digital du board arduino) sont des fonctions de base ou personnel privée a la librairie que j'ai écrit dont je ne voulais vous imposer la présence.

    Avec ce mélange de C arduino et de cpp tous le monde a l'air perdu, je vais donc reformuler ma question:
    -Le code est correctement compiler, pas de message d'erreur lors de l'inclusion, mais aurai je fait une erreur de programmation ?
    -Est-ce normal de ne pouvoir accéder a un attribut définis (ici en fonction des paramètres passer au constructeur) dans une méthode du même objet ?

    Un mini briefing sur les objets en cpp serai la bienvenue.

    PS: la librairie est en période de test et donc je me sert des méthodes d'affichage fournis par l'objet Serial (comme print() ou println() afin de vérifier si les données sont correctes) qui sert a établir une liaison série avec le board arduino.
    et je suis bloquer la et vos réponses sont la bienvenue afin de m'extirquer de cette impasse.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2009, 15h56
  2. Accès aux attributs d'un objet
    Par JeanMi66 dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 09/07/2008, 14h17
  3. Problème d'accés aux attributs de ma classe
    Par Invité dans le forum Débuter
    Réponses: 3
    Dernier message: 08/07/2008, 22h49
  4. Problème d'acces aux attributs
    Par parano dans le forum C++
    Réponses: 3
    Dernier message: 16/03/2007, 16h29
  5. [POO] Acces aux attributs d'un objet depuis une methode evenement :s
    Par NikoGJ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2006, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo