#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// For ESP32/ESP8266, "14" is often GPIO14.
// For Arduino UNO, use a valid digital pin like 2 or 3.
const int IR_RECEIVE_PIN = 14;
String decodeKeyValue(uint32_t raw);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.print("IR Ready");
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}
void loop() {
if (IrReceiver.decode()) {
uint32_t raw = IrReceiver.decodedIRData.decodedRawData;
String key = decodeKeyValue(raw);
Serial.print("Raw: 0x");
Serial.println(raw, HEX);
if (key != "ERROR") {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pressed:");
lcd.setCursor(0, 1);
lcd.print(key);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Unknown");
lcd.setCursor(0, 1);
lcd.print("0x");
lcd.print(raw, HEX);
}
IrReceiver.resume();
}
}
String decodeKeyValue(uint32_t result) {
switch (result) {
case 0x9768FF00: return "0";
case 0xCF30FF00: return "1";
case 0xE718FF00: return "2";
case 0x857AFF00: return "3";
case 0xEF10FF00: return "4";
case 0xC738FF00: return "5";
case 0xA55AFF00: return "6";
case 0xBD42FF00: return "7";
case 0xB54AFF00: return "8";
case 0xAD52FF00: return "9";
default: return "ERROR";
}
}