Compare IR Remote Hex Values

Hey All,
This is the loop from the IRremote demo from the examples folder

  if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
    Serial.println("");
    irrecv.resume();  // Receive the next value
  }

The codes I'm receiving look like this

FD08F7
FD8877
FD48B7
FD28D7
FDA857
FD6897
FD18E7
FD9867
FD58A7

What would and if statement look like to compare these hex values?

Thanks
Rich

Example:

unsigned long myValue = results.value;
if(myValue == 0xFD08F7)
  {
       //do something
  }

else if(myValue == 0xFD8877)
  {
       //do something
  }

The following does not compile

    if((results.value, HEX) == "FD08F7"){
      Serial.println("HI");
    }

Compilation error: ISO C++ forbids comparison between pointer and integer [-fpermissive]

How can I make this comparison?
Thanks
Rich

Here's the whole sketch

/*
 * IRremoteESP8266: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * This is very simple teaching code to show you how to use the library.
 * If you are trying to decode your Infra-Red remote(s) for later replay,
 * use the IRrecvDumpV2.ino (or later) example code instead of this.
 * An IR detector/demodulator must be connected to the input kRecvPin.
 * Copyright 2009 Ken Shirriff, http://arcfn.com
 * Example circuit diagram:
 *  https://github.com/crankyoldgit/IRremoteESP8266/wiki#ir-receiving
 * Changes:
 *   Version 0.2 June, 2017
 *     Changed GPIO pin to the same as other examples.
 *     Used our own method for printing a uint64_t.
 *     Changed the baud rate to 115200.
 *   Version 0.1 Sept, 2015
 *     Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009
 */

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// An IR detector/demodulator is connected to GPIO pin 14(D5 on a NodeMCU
// board).
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
// Note: GPIO 14 won't work on the ESP32-C3 as it causes the board to reboot.
#ifdef ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 4;  // 14 on a ESP32-C3 causes a boot loop.
#else  // ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 4;
#endif  // ARDUINO_ESP32C3_DEV

IRrecv irrecv(kRecvPin);

decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Start the receiver
  while (!Serial)  // Wait for the serial connection to be establised.
    delay(50);
  Serial.println();
  Serial.print("IRrecvDemo is now running and waiting for IR message on Pin ");
  Serial.println(kRecvPin);
}

void loop() {
  if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
    if((results.value, HEX) == "FD08F7"){
      Serial.println("HI");
    }
    Serial.println("");
    irrecv.resume();  // Receive the next value
  }
  delay(100);
}

As mentioned above.

unsigned long myValue = results.value;
if(myValue == 0xFD08F7)
  {
       //do something
  }

else if(myValue == 0xFD8877)
  {
       //do something
  }

See post #2.

Here is the whole sketch. It compiles and loads but does not respond when the code matches.

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// An IR detector/demodulator is connected to GPIO pin 14(D5 on a NodeMCU
// board).
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
// Note: GPIO 14 won't work on the ESP32-C3 as it causes the board to reboot.
#ifdef ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 4;  // 14 on a ESP32-C3 causes a boot loop.
#else                         // ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 4;
#endif                        // ARDUINO_ESP32C3_DEV

IRrecv irrecv(kRecvPin);

decode_results results;
unsigned long myValue = results.value;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Start the receiver
  while (!Serial)       // Wait for the serial connection to be establised.
    delay(50);
  Serial.println();
  Serial.print("IRrecvDemo is now running and waiting for IR message on Pin ");
  Serial.println(kRecvPin);
}

void loop() {
  if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
    if (myValue == 0xFD08F7) {
      Serial.println("HI");
    }

  Serial.println("");
  irrecv.resume();  // Receive the next value
}
delay(100);
}

Ah, Got it working!

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// An IR detector/demodulator is connected to GPIO pin 14(D5 on a NodeMCU
// board).
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
// Note: GPIO 14 won't work on the ESP32-C3 as it causes the board to reboot.
#ifdef ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 4;  // 14 on a ESP32-C3 causes a boot loop.
#else                         // ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 4;
#endif                        // ARDUINO_ESP32C3_DEV

IRrecv irrecv(kRecvPin);

decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Start the receiver
  while (!Serial)       // Wait for the serial connection to be establised.
    delay(50);
  Serial.println();
  Serial.print("IRrecvDemo is now running and waiting for IR message on Pin ");
  Serial.println(kRecvPin);
}

void loop() {
unsigned long myValue = results.value;

  if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
    if (myValue == 0xFD08F7) {
      Serial.println("HI");
    }

  Serial.println("");
  irrecv.resume();  // Receive the next value
}
delay(100);
}

1 Like

Credit for the solution should go to @LarryD.

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