axlf
January 6, 2024, 1:44am
1
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
LarryD
January 6, 2024, 1:59am
2
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
LarryD
January 6, 2024, 2:12am
4
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 ?
1 Like
axlf
January 6, 2024, 2:14am
5
bruh, its to many arguments
LarryD
January 6, 2024, 2:15am
6
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
system
Closed
July 4, 2024, 11:37pm
9
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.