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 :

Problèmes nouvelle librairie IRremote version 3.0


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut Problèmes nouvelle librairie IRremote version 3.0
    Bonjour,
    Après la mise à jour de la librairie IRremote version 3, les anciens programmes ne fonctionnent plus car ils affichent
    , via le moniteur série, ce message, grossièrement traduit : "Attention la fonction decode(&results) est obsolète, utiliser decode().
    J'ai contacté l'auteur de la librairie qui m'a répondu, sans d'autres explications, de consulter ce lien :
    https://github.com/Arduino-IRremote/...the-3x-version. Mais ce n'est pas très clair.

    Comment migrer ce programme vers la version 3 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
    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
     
    #include <IRremote.h>
     
    const int broCapteurIR = 8;
    IRrecv oRecInfra(broCapteurIR);
    decode_results oResultat;
     
    void setup()
    {
      Serial.begin(9600);
     
      // Démarre récepteur IR
      oRecInfra.enableIRIn();
    }
     
    void loop() {
      if( oRecInfra.decode(&oResultat) )
      {
        afficherData();
     
        // Valeur suivante
        oRecInfra.resume();
      }
      delay(250);
    }
     
    void afficherData()
    {
      if (oResultat.decode_type == UNKNOWN)
      {
        Serial.println("-Message illisible");
      }
      else
      {
        if (oResultat.decode_type == NEC)
        {
          Serial.print("- decode NEC: ");
        }
        else if (oResultat.decode_type == SONY)
        {
          Serial.print("- decode SONY: ");
        }
        else if (oResultat.decode_type == RC5)
        {
          Serial.print("- decode RC5: ");
        }
        else if (oResultat.decode_type == RC6)
        {
          Serial.print("- decode RC6: ");
        }
     
        Serial.print("Valeur = ");
        Serial.println(oResultat.value, DEC);
        Serial.println(oResultat.value, HEX);
      }
    }

  2. #2
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Bonjour

    oui ils ont simplifié l'interface mais ça fait que les anciens scripts ont des alertes... essayez avec ce code (non testé, j'ai mis la console à 115200 bauds):
    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
    #include <IRremote.h>
    const byte brocheCapteurIR = 8;
    
    void afficherData()
    {
      if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
        Serial.println(F("protocole Inconnu"));
      } else {
        Serial.print(F("protocole : "));
        Serial.println(getProtocolString(IrReceiver.decodedIRData.protocol));
        Serial.print(F("Valeur = 0x"));
        Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
        Serial.write('\t');
        Serial.println(IrReceiver.decodedIRData.decodedRawData, DEC);
      }
    }
    
    void setup()
    {
      Serial.begin(115200);   // <<=== ATTENTION CONSOLE SERIE À 115200 BAUDS
      IrReceiver.begin(brocheCapteurIR);
    }
    
    void loop() {
      if (IrReceiver.decode()) { // reçoit un code IR
        afficherData();
        IrReceiver.resume();     // Valeur suivante
      }
    }
    Une fois décodées, les données sont maintenant dans la structure IrReceiver.decodedIRData qui est de type IRData:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       struct IRData {
        decode_type_t protocol;     ///< UNKNOWN, NEC, SONY, RC5, ...
        uint16_t address;           ///< Decoded address
        uint16_t command;           ///< Decoded command
        uint16_t extra;             ///< Used by MagiQuest and for Kaseikyo unknown vendor ID
        uint8_t numberOfBits; ///< Number of bits received for data (address + command + parity) - to determine protocol length if different length are possible (currently only Sony).
        uint8_t flags;              ///< See definitions above
        uint32_t decodedRawData;    ///< up to 32 bit decoded raw data, formerly used for send functions.
        irparams_struct *rawDataPtr; /// pointer of the raw timing data to be decoded
      };
    Vous y retrouvez donc aussi le protocole, et d'autres infos suivant ce que vous voulez faire.

    Pour l'affichage du protocole, plutôt que de faire vous même les test et afficher son nom, autant utiliser la bibliothèque qui comprend une fonction getProtocolString() qui vous rend un pointeur vers une chaîne de caractères pour l'affichage. ça simplifie donc le code.

    au lieu d'imprimer vous même les infos à la main, vous pourriez aussi appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     IrReceiver.printIRResultShort(&Serial);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut
    Bonjour,
    Merci pour le code, je vais tester cela dans l'après-midi

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut
    Voila, j'ai testé le programme mais j'ai ce message d'erreur :
    "getProtocolString was not declared in this scope"
    Une idée ?

  5. #5
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    êtes vous sûr d'avoir installé la dernière dernière version de la bibliothèque? (Version 3.0.0)

    je l'ai installé en téléchargeant le Zip à la main depuis GitHub
    Nom : ir.png
Affichages : 1311
Taille : 124,0 Ko

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut
    Bonjour,
    J'ai désinstallé complétement l'IDE Arduino et effacé la librairie IRremote.
    J'ai re-téléchargé la version 3 et je l'ai installé.
    Le message (voir copies d'écran) persiste toujours.
    Images attachées Images attachées   

  7. #7
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Ne l'installez pas depuis l'utilitaire, ça prend peut-être la dernière version stable, pas la dernière version disponible

    1. téléchargez le Zip depuis GitHub, ça va mettre sur votre bureau un dossier qui se nomme Arduino-IRremote-master
    2. renommez ce dossier en IRremote
    3. déplacez le dans votre dossier Arduino/libraries
    4. démarrez l'IDE et essayez de compiler

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut
    Bon, après plusieurs tentatives (merci windows 10) j'ai pu installer la version 3.0 selon vos instructions.
    Seulement les résultats me laissent perplexe car les codes envoyés par ma télécommande ne sont plus
    les même qu'avec les anciennes version de la librairie... Comme je suis plus spécialisé en électronique
    qu'en développement Arduino, j'ai du mal à comprendre

  9. #9
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Dans la doc (sur GitHub) l'auteur dit
    The decoded result is now in in IrReceiver.decodedIRData and not in results any more, therefore replace any occurrences of results.value and / or results.decode_type (and similar) to IrReceiver.decodedIRData.decodedRawData and / or IrReceiver.decodedIRData.decodedRawData.

    Dans le programme proposé, j'imprime les données suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
        Serial.write('\t');
        Serial.println(IrReceiver.decodedIRData.decodedRawData, DEC);
    il y a d'autres champs dans la structure comme address et command par exemple.

    Ce que vous aviez avant dans results.value doit être un sous ensemble de decodedIRData.decodedRawData sans doute

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut
    Bonsoir,
    Merci pour vos explications, en cas de besoin en électronique, vous pouvez compter sur moi.

  11. #11
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    J’y penserai!

Discussions similaires

  1. Problème d'affichage avec une nouvelle librairie
    Par reito dans le forum Struts 1
    Réponses: 0
    Dernier message: 22/07/2010, 12h22
  2. problèmes de librairies jpeg
    Par ketchupi dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 20/07/2005, 08h57
  3. [Delphi 2005] : Problème de librairies.....
    Par babyface dans le forum Composants VCL
    Réponses: 1
    Dernier message: 07/07/2005, 14h15
  4. Spécifier une nouvelle librairie graphique/jeu
    Par Montaigne dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 20/06/2005, 18h59
  5. problème de librairies...
    Par Mickey34 dans le forum Réseau
    Réponses: 12
    Dernier message: 22/08/2003, 18h39

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