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

Arduino Discussion :

Probème d'héritage de classe


Sujet :

Arduino

  1. #1
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2024
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2024
    Messages : 26
    Par défaut Probème d'héritage de classe
    bonjour à tous,

    j'ai un petit problème, j'utilise l'objet LiquidCrystal_I2C et en particulier sa fonction setCursor

    je désire dans mon objet fils Tools nommer une méthode portant le même nom que dans la classe mère LiquidCrystal_I2C mais en ajoutant des choses à l'intérieur,

    j'ai essayé les mots virtual et override sans succès sans trop ou savoir mettre ces 2 mots avant le void, après et surtout dans le fichier .h et/ou .cpp et je ne sais pas appeler la méthode de la classe mère,

    pouvez-vous m'aider s'il vous plaît ?

    Merci

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 063
    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 063
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    Comme ceci je pense :

    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
    class Tools : public LiquidCrystal_I2C {
     
      public :
        // Constructeur de la classe dérivée
        // ...
     
        void setCursor(int col, int row) {    
           // Appeler la méthode de la classe mère
           LiquidCrystal_I2C::setCursor(col, row);
     
           //
           // Ajouter les fonctionnalités supplémentaires ici
           //
       }
     
      // etc.
     
    };

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 873
    Par défaut
    en gros vous voulez récupérer tout ce qui est envoyé à l'écran pour le stocker dans un buffer intermédiaire au niveau de votre classe Tools, c'est ça ?

    Je n'ai pas testé mais ça pourrait ressembler un peu à cela pour le début.

    ==> vous sous classez LiquidCrystal_I2C mais faites un template pour la taille de façon à créer le tableau 2D de sauvegarde du contenu de l'écran de la bonne taille
    ==> vous implémentez les méthodes importantes (init, write, clear, setCursor)
    ==> j'ai rajouté une fonction afficherBuffer() qui permet de voir le contenu qui a été envoyé à l'écran.




    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 <LiquidCrystal_I2C.h>
     
    template <uint8_t Cols, uint8_t Rows>
    class Tools : public LiquidCrystal_I2C {
      private:
        char display[Rows][Cols] = {};  // Tableau 2D pour stocker les données
        uint8_t currentCol = 0;  // Colonne actuelle du curseur
        uint8_t currentRow = 0;  // Ligne actuelle du curseur
     
      public:
        Tools(uint8_t address) : LiquidCrystal_I2C(address, Cols, Rows) {}
     
        void init() {
          LiquidCrystal_I2C::init();
          backlight();
          clear();
        }
     
        void setCursor(uint8_t col, uint8_t row) {
          if (col < Cols && row < Rows) {
            currentCol = col;
            currentRow = row;
            Serial.print("col:"); Serial.print(col);
            Serial.print("\trow:"); Serial.println(row);
            LiquidCrystal_I2C::setCursor(col, row);
          }
        }
     
        size_t write(uint8_t value) {
          if (currentCol < Cols && currentRow < Rows) {
            display[currentRow][currentCol] = value;
            // on ne gère pas comme un LCD le dépassement en fin de ligne
            currentCol++;
            Serial.write(value);
          }
          return LiquidCrystal_I2C::write(value);
        }
     
        void clear() {
          for (uint8_t row = 0; row < Rows; row++) {
            for (uint8_t col = 0; col < Cols; col++) {
              display[row][col] = ' ';
            }
          }
          LiquidCrystal_I2C::clear();
        }
     
        void afficherBuffer() {
          Serial.println();
          Serial.write(' ');
          for (uint8_t col = 0; col < Cols; col++) Serial.write(col % 5 == 0 ? '|' : '.');
          Serial.println();
          for (uint8_t row = 0; row < Rows; row++) {
            Serial.write('|');
            for (uint8_t col = 0; col < Cols; col++) Serial.write(display[row][col]);
            Serial.println('|');
          }
        }
    };
     
    Tools<20, 4> lcd(0x27);
     
    void setup() {
      Serial.begin(115200);
      lcd.init();
      lcd.setCursor(3, 0);
      lcd.print("Hello, world!");
      lcd.afficherBuffer();
     
      lcd.setCursor(2, 2);
      lcd.print("BONJOUR A TOUS!");
      lcd.afficherBuffer();
    }
     
    void loop() {}

Discussions similaires

  1. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 14/08/2006, 00h48
  2. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2006, 00h51
  3. Heritage de classe avec classes internes
    Par Regis.C dans le forum Langage
    Réponses: 11
    Dernier message: 27/04/2005, 13h19
  4. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 02/03/2005, 00h16
  5. [FLASH MX2004] Heritage de classe
    Par bolo dans le forum Flash
    Réponses: 9
    Dernier message: 05/12/2004, 14h08

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