Problème avec la librairie IRremote

Bonjour,
Je cherche à faire fonctionner un module KY-022 et pour cela, j'ai trouvé un code sur ce site:
https://sensorkit.fr.joy-it.net/index.php?title=KY-022_Module_récepteur_infrarouge#Exemple_de_code_pour_Arduino

J'ai aussi installé la librairie IRremote via le Sketch->Include library->Manage Libraries.

Seulement, quand je téléverse le programme dans l'Arduino uno, je reçois ce message sur le moniteur :

"The function decode(&results)) is deprecated and may not work as expected! Just use decode() - without any parameter."

Quelqu'un peut-il m'aiguiller? J'ai l'impression que la librairie est mal installé mais je ne vois pas comment faire d'autre.

Merci d'avance

Non c’est bien installé mais les auteurs de la bibliothèque ont décidé de tout changer mais conserver le même nom de bibliothèque... donc il faut modifier le code du tuto pour s’adapter à la nouvelle bibliothèque (ou trouver une ancienne version de la bibliothèque mais c’est dommage de partir avec un truc dépassé).

La bibliothèque est installée avec des exemples, regardez comment ils fonctionnent pour comprendre les modifications nécessaires

Merci pour votre réponse.

Je ne trouve malheureusement pas le chemin pour ouvrir les exemples. Pouvez-vous m'expliquer?

Merci

Bonsoir

dans l'IDE Arduino

menu Fichiers/Exemples : il n'y a pas un groupe IRremote ?
c'est le cas pour la version adaptée aux ESP8266

N.B Il est indiqué en haut du tutoriel cité qu'il a plus de 4 ans !!!
C'est beaucoup et durant ce temps la librairie a pu évoluer .... sans que Sensorkit fasse l'effort de s'adapter

damienmobius:
Je ne trouve malheureusement pas le chemin pour ouvrir les exemples. Pouvez-vous m'expliquer?

Moi je les vois (après avoir installé la bibliothèque bien sûr) sous les exemples:

sinon vous pouvez aussi les voir sur internet dans le GitHub de la bibliothèque

Merci beaucoup,

J’ai trouvé le chemin qui me permet d’avoir accès aux exemples. C’est bon à savoir.

Par contre, avec le code

/*
 * SimpleReceiver.cpp
 *
 * Demonstrates receiving NEC IR codes with IRrecv
 *
 *  Copyright (C) 2020-2021  Armin Joachimsmeyer
 *  armin.joachimsmeyer@gmail.com
 *
 *  This file is part of Arduino-IRremote https://github.com/z3t0/Arduino-IRremote.
 *
 *  MIT License
 */

/*
 * Specify which protocol(s) should be used for decoding.
 * If no protocol is defined, all protocols are active.
 */
#define DECODE_NEC 1

#include <IRremote.h>

int IR_RECEIVE_PIN = 11;

void setup() {
    Serial.begin(115200);
    // Just to know which program is running on my Arduino
    Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

    /*
     * Start the receiver, enable feedback LED and take LED feedback pin from the internal boards definition
     */
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);

    Serial.print(F("Ready to receive IR signals at pin "));
    Serial.println(IR_RECEIVE_PIN);
}

void loop() {
    /*
     * Check if received data is available and if yes, try to decode it.
     * Decoded result is in the IrReceiver.decodedIRData structure.
     *
     * E.g. command is in IrReceiver.decodedIRData.command
     * address is in command is in IrReceiver.decodedIRData.address
     * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData
     */
    if (IrReceiver.decode()) {

        // Print a short summary of received data
        IrReceiver.printIRResultShort(&Serial);
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            // We have an unknown protocol here, print more info
            IrReceiver.printIRResultRawFormatted(&Serial, true);
        }
        Serial.println();

        /*
         * !!!Important!!! Enable receiving of the next value,
         * since receiving has stopped after the end of the current received data packet.
         */
        IrReceiver.resume(); // Enable receiving of the next value

        /*
         * Finally, check the received data and perform actions according to the received command
         */
        if (IrReceiver.decodedIRData.command == 0x10) {
            // do something
        } else if (IrReceiver.decodedIRData.command == 0x11) {
            // do something else
        }
    }
}

J’obtient les réponses sur le terminal :
⸮⸮|⸮0⸮⸮⸮%ͬP⸮Y⸮T⸮⸮⸮,⸮⸮dh(⸮4⸮9S⸮%⸮9c%⸮_n-8⸮⸮⸮⸮%[M⸮T⸮

Cela ne m’aide pas beaucoup. A savoir que mon intention est de contrôler un robot 2 rues avec une télécommande. Il faudrait que je puisse connaitre une valeur à exploitée dans mon programme.

Bonjour,

Ton terminal est bien réglé sur la vitesse configurée dans ton programme, à savoir 115200 bds?

Effectivement, je n’étais pas sur le bond bds.

Entre temps, je me suis tourné vers un autre exemple. Je voudrais pouvoir détecter les bons boutons poussés via la télécommande. En partant de ce code :

#include <IRremote.h>

int IR_RECEIVE_PIN = 11;

void setup() {
  Serial.begin(9600);
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver, enable feedback LED, take LED feedback pin from the internal boards definition
}

void loop() {
  if (IrReceiver.decode()) {
    switch(IrReceiver.decodedIRData.protocol) {
      case RC5: printDemo("sendRC5"); break;
      case RC6: printDemo("sendRC6"); break;
      case NEC: printDemo("sendNEC"); break;
      case SONY: printDemo("sendSony"); break;
      case PANASONIC: printDemo("sendPanasonic"); break;
      case JVC: printDemo("sendJVC"); break;
      case SAMSUNG: printDemo("sendSamsung"); break;
      case WHYNTER: printDemo("sendWhynter"); break;
      case LG: printDemo("sendLG"); break;
      case SHARP: printDemo("sendSharp"); break;
      case DENON: printDemo("sendDenon"); break;
      case LEGO_PF: printDemo("sendLegoPowerFunctions"); break;
      default:
        IrReceiver.printIRResultShort(&Serial);
    }
    
    IrReceiver.resume();
  }
}

void printDemo(const char *functionName){
  Serial.print(functionName);
  Serial.print("(0x");
  Serial.print(IrReceiver.decodedIRData.address, HEX);
  Serial.print(", 0x");
  Serial.print(IrReceiver.decodedIRData.command, HEX);
  Serial.println(");");
}

Je l’ai modifié en :

#include <IRremote.h>

int IR_RECEIVE_PIN = 11;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver, enable feedback LED, take LED feedback pin from the internal boards definition
}

void loop() {
  if (IrReceiver.decode()) {
    switch (IrReceiver.decodedIRData.protocol) {
      case NEC: printDemo("sendNEC"); break;
      default:
        IrReceiver.printIRResultShort(&Serial);
    }

    IrReceiver.resume();
  }
}

void printDemo(const char *functionName) {
  Serial.print(IrReceiver.decodedIRData.command, HEX);
  if (IrReceiver.decodedIRData.command == 8) {
    Serial.print(" = touche 4");
  }
  if (IrReceiver.decodedIRData.command == 45) {
    Serial.print(" = touche CH-");
  }
  if (IrReceiver.decodedIRData.command == 46) {
    Serial.print(" = touche CH");
  }
  if (IrReceiver.decodedIRData.command == 47) {
    Serial.print(" = touche CH+");
  }
  if (IrReceiver.decodedIRData.command == 44) {
    Serial.print(" = touche |<<");
  }
  if (IrReceiver.decodedIRData.command == 40) {
    Serial.print(" = touche >>|");
  }
  if (IrReceiver.decodedIRData.command == 43) {
    Serial.print(" = touche >||");
  }
  if (IrReceiver.decodedIRData.command == 7) {
    Serial.print(" = touche -");
  }
  if (IrReceiver.decodedIRData.command == 15) {
    Serial.print(" = touche +");
  }
  if (IrReceiver.decodedIRData.command == 9) {
    Serial.print(" = touche EQ");
  }
    Serial.println(");");
}

Je n’ai pas encore définit toutes les touches mais j’obtient ceci sur le terminal :

44);
44);
40);
43);
43);
7 = touche -);
7 = touche -);
15);
15);
9 = touche EQ);
16);

Pouvez-vous me dire pourquoi cela fonctionne avec certaines touches et pas d’autres?

Aussi, pourquoi le code qui contient :
if (IrReceiver.decodedIRData.command == 5E) {
Serial.print(“Gagné”);
}
N’est pas correct?

Merci d’avance,

vous affichez en HEX mais vous testez en décimal. Si la version hexadécimale est identique, ça fonctionnera sinon… (c’est pour cela que 7 fonctionne par exemple)

par exemple quand vous voyez 44 dans la console de sortie, pour tester cette valeur il faudrait écrire le test avec 0x44

  if (IrReceiver.decodedIRData.command == 0x44) {
    Serial.print(" = touche |<<");
  }

(et des else entre les if ou un switch/case ne seraient pas un luxe)

damienmobius:
Aussi, pourquoi le code qui contient :
if (IrReceiver.decodedIRData.command == 5E) {
Serial.print("Gagné");
}
N'est pas correct?

Parce que 5E n'est pas un nombre correct. Si tu veux écrire un nombre en hexa c'est 0x5E.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.