Whys my inflared receiver only showing -1? (i was using int not hex on the serial monitor)

when i connected the inflared receiver and i presse a button remote, it only showing FFFFFF, but when i change it to int, it only showing me -1

what happend?

#include <IRremote.h>

#define IR_PIN 11  // IR receiver pin
#define SEG_A 2    // Seven-segment display segment A
#define SEG_B 3    // Seven-segment display segment B
#define SEG_C 4    // Seven-segment display segment C
#define SEG_D 5    // Seven-segment display segment D
#define SEG_E 6   // Seven-segment display segment E
#define SEG_F 7    // Seven-segment display segment F
#define SEG_G 8   

int numbers[] = {
  B1111110, // 0
  B0110000, // 1
  B1101101, // 2
  B1111001, // 3
  B0110011, // 4
  B1011011, // 5
  B1011111, // 6
  B1110000, // 7
  B1111111, // 8
  B1111011  // 9
};

IRrecv irrecv(IR_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);  
  irrecv.enableIRIn();  
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
}

void displayNumber(int num) {
  if (num >= 0 && num <= 9) {
    digitalWrite(SEG_A, bitRead(numbers[num], 6));
    digitalWrite(SEG_B, bitRead(numbers[num], 5));
    digitalWrite(SEG_C, bitRead(numbers[num], 4));
    digitalWrite(SEG_D, bitRead(numbers[num], 3));
    digitalWrite(SEG_E, bitRead(numbers[num], 2));
    digitalWrite(SEG_F, bitRead(numbers[num], 1));
    digitalWrite(SEG_G, bitRead(numbers[num], 0));
  }
}

void loop() {
  if (irrecv.decode(&results)) {
    
    int number = results.value;
    displayNumber(number);

  
    Serial.println(number);

    
    delay(500);

  
    irrecv.resume();
  }
}

that is the code

Google Arduino C++ Data types

https://learn.sparkfun.com/tutorials/data-types-in-arduino/defining-data-types

  • boolean (8 bit) - simple logical true/false
  • byte (8 bit) - unsigned number from 0-255
  • char (8 bit) - signed number from -128 to 127. The compiler will attempt to interpret this data type as a character in some circumstances, which may yield unexpected results
  • unsigned char (8 bit) - same as 'byte'; if this is what you're after, you should use 'byte' instead, for reasons of clarity
  • word (16 bit) - unsigned number from 0-65535
  • unsigned int (16 bit)- the same as 'word'. Use 'word' instead for clarity and brevity
  • int (16 bit) - signed number from -32768 to 32767. This is most commonly what you see used for general purpose variables in Arduino example code provided with the IDE
  • unsigned long (32 bit) - unsigned number from 0-4,294,967,295. The most common usage of this is to store the result of the millis() function, which returns the number of milliseconds the current code has been running
  • long (32 bit) - signed number from -2,147,483,648 to 2,147,483,647
  • float (32 bit) - signed number from -3.4028235E38 to 3.4028235E38. Floating point on the Arduino is not native; the compiler has to jump through hoops to make it work. If you can avoid it, you should. We'll touch on this later.

Try:

unsigned long number = results.value;
displayNumber(number, HEX);

    unsigned long number = results.value;
    displayNumber(number);

    Serial.println(number, HEX);
1 Like

its only shows
FFFFFFF

FFFFFFFF

FFFFFFFF

FFFFFFFF

FFFFFFFF

FFFFFFFF

FFFFFFFF

FFFFFFFF

Sorry, should be

    unsigned long number = results.value;
    displayNumber(number);

    Serial.println(number, HEX);

If you are receiving FFFFFFF
And you print FFFFFFF to the serial monitor, what would you expect to see different ? :thinking:

1 Like

bruh, its to many arguments

Post #2 should have been:

    unsigned long number = results.value;
    displayNumber(number);

    Serial.println(number, HEX);

Try this code:


#include <IRremote.h>

#define IR_PIN 11  // IR receiver pin
#define SEG_A 2    // Seven-segment display segment A
#define SEG_B 3    // Seven-segment display segment B
#define SEG_C 4    // Seven-segment display segment C
#define SEG_D 5    // Seven-segment display segment D
#define SEG_E 6    // Seven-segment display segment E
#define SEG_F 7    // Seven-segment display segment F
#define SEG_G 8

int numbers[] = {
  B1111110, // 0
  B0110000, // 1
  B1101101, // 2
  B1111001, // 3
  B0110011, // 4
  B1011011, // 5
  B1011111, // 6
  B1110000, // 7
  B1111111, // 8
  B1111011  // 9
};

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IR_PIN);
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
}

void displayNumber(int num) {
  if (num >= 0 && num <= 9) {
    digitalWrite(SEG_A, bitRead(numbers[num], 6));
    digitalWrite(SEG_B, bitRead(numbers[num], 5));
    digitalWrite(SEG_C, bitRead(numbers[num], 4));
    digitalWrite(SEG_D, bitRead(numbers[num], 3));
    digitalWrite(SEG_E, bitRead(numbers[num], 2));
    digitalWrite(SEG_F, bitRead(numbers[num], 1));
    digitalWrite(SEG_G, bitRead(numbers[num], 0));
  }
}

void loop() {
  if (IrReceiver.decode()) {
    unsigned long number = IrReceiver.decodedIRData.decodedRawData;
    Serial.println(number, HEX);
    delay(500);
    IrReceiver.resume();
  }
}

Printout:

9768FF00
CF30FF00
E718FF00
857AFF00
EF10FF00
C738FF00
BD42FF00
1 Like

thank you so much.

1 Like

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