使用nano+HX1838(5v gnd D2) 接收遥控器发来的按键,分析出代码,然后再用单片机控制红外红外发发射管遥控设备。
这里是用单片机遥控TCL电视的开关
分析结果
HX1838 红外接收已就绪,请按遥控器...
协议: PulseDistance | 地址: 0x0 | 键值: 0x0 | 原始数据: 0xAB054F
/******************************************************* * Nano + HX1838 红外接收实验 * 库:IRremote (≥3.x) 头文件 IRremote.hpp * 功能:识别遥控器协议 → 串口打印地址/键值 ******************************************************/ #include <IRremote.hpp> // 官方 3.x 版本主头文件 /* ========== 用户可调参数 ========== */ const uint8_t IR_PIN = 2; // HX1838 的 OUT 必须接 D2(中断 0) const uint32_t BAUD = 115200; // 与电脑串口监视器保持一致 /* ========== setup 只做一次 ========== */ void setup() { Serial.begin(BAUD); // 打开串口,方便电脑查看 while (!Serial); // 等串口就绪(部分板子需要) // 初始化红外接收:引脚 + 是否启用板载 LED 反馈(ENABLE_LED_FEEDBACK) IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); Serial.println(F("HX1838 红外接收已就绪,请按遥控器...")); } /* ========== 主循环不断检测 ========== */ void loop() { // decode() 为 true 表示收到一帧完整数据 if (IrReceiver.decode()) { /* ---- 串口打印一条解析结果 ---- */ Serial.print(F("协议: ")); // 3.x 新版用 getProtocolString() 拿协议名 Serial.print(getProtocolString(IrReceiver.decodedIRData.protocol)); Serial.print(F(" | 地址: 0x")); Serial.print(IrReceiver.decodedIRData.address, HEX); // 遥控器地址 Serial.print(F(" | 键值: 0x")); Serial.print(IrReceiver.decodedIRData.command, HEX); // 真正按键值 Serial.print(F(" | 原始数据: 0x")); Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); /* ---- 准备接收下一帧 ---- */ IrReceiver.resume(); // 必须调用,否则只能收一次 } }
此乃自留地,勿喷