Arduino Uno 接收红外遥控

本文介绍使用Arduino Uno控制红外模块的示例程序。 这个程序将读取红外接收器接收到的数据,并通过串口监视器显示出来,并打印各按键。

1.连接红外接收器到Arduino:

  • VCC 连接到 Arduino 的 5V
  • GND 连接到 Arduino 的 GND
  • OUT 连接到 Arduino 的数字引脚2

2.安装IRremote库。

3.代码

c 复制代码
#include <Arduino.h>
#include <IRremote.hpp> // Include the library

// Define the pin connected to the IR receiver
#define IR_RECEIVE_PIN 2

void setup() {
    Serial.begin(115200);

    // Just to know which program is running on my Arduino
    Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

    // Start the receiver and if not 3rd parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);

    Serial.print(F("Ready to receive IR signals of protocols: "));
    printActiveIRProtocols(&Serial);
    // Serial.println(F("at pin " STR(IR_RECEIVE_PIN)));
}

void loop() {
    /*
     * Check if received data is available and if yes, try to decode it.
     * Decoded result is in the IrReceiver.decodedIRData structure.
     *
     * E.g. command is in IrReceiver.decodedIRData.command
     * address is in command is in IrReceiver.decodedIRData.address
     * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData
     */
    if (IrReceiver.decode()) {

        /*
         * Print a summary of received data
         */
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            Serial.println(F("Received noise or an unknown (or not yet enabled) protocol"));
            // We have an unknown protocol here, print extended info
            IrReceiver.printIRResultRawFormatted(&Serial, true);

            IrReceiver.resume(); // Do it here, to preserve raw data for printing with printIRResultRawFormatted()
        } else {
            IrReceiver.resume(); // Early enable receiving of the next IR frame

            IrReceiver.printIRResultShort(&Serial);
            IrReceiver.printIRSendUsage(&Serial);
        }
        Serial.println();

        /*
         * Finally, check the received data and perform actions according to the received command
         */
        if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT) {
            Serial.println(F("Repeat received. Here you can repeat the same action as before."));
        } else {
            if (IrReceiver.decodedIRData.command == 0x45) {
                Serial.println(F("Received command 0x45 = Btn CH-"));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x46) {
                Serial.println(F("Received command 0x46 = Btn CH"));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x47) {
                Serial.println(F("Received command 0x47 = Btn CH+"));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x44) {
                Serial.println(F("Received command 0x44 = Btn <<"));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x40) {
                Serial.println(F("Received command 0x40 = Btn >>"));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x43) {
                Serial.println(F("Received command 0x43 = Btn >II"));
                // do something else
            }else if (IrReceiver.decodedIRData.command == 0x7) {
                Serial.println(F("Received command 0x7 = Btn -."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x15) {
                Serial.println(F("Received command 0x15 = Btn +."));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x9) {
                Serial.println(F("Received command 0x9 = Btn EQ."));
                // do something else
            }else if (IrReceiver.decodedIRData.command == 0x16) {
                Serial.println(F("Received command 0x16 = Btn 0."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x19) {
                Serial.println(F("Received command 0x19 = Btn 100+."));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0xD) {
                Serial.println(F("Received command 0xD = Btn 200+."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0xC) {
                Serial.println(F("Received command 0xC = Btn 1."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x18) {
                Serial.println(F("Received command 0x18 = Btn 2."));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x5E) {
                Serial.println(F("Received command 0x5E = Btn 3."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x8) {
                Serial.println(F("Received command 0x8  = Btn 4."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x1C) {
                Serial.println(F("Received command 0x1C = Btn 5."));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x5A) {
                Serial.println(F("Received command 0x5A = Btn 6."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x42) {
                Serial.println(F("Received command 0x42  = Btn 7."));
                // do something else
            } else if (IrReceiver.decodedIRData.command == 0x52) {
                Serial.println(F("Received command 0x52 = Btn 8."));
                // do something
            } else if (IrReceiver.decodedIRData.command == 0x4A) {
                Serial.println(F("Received command 0x4A = Btn 9."));
                // do something else
            }

        }
    }
}

4.输出信息

txt 复制代码
Repeat received. Here you can repeat the same action as before.
Protocol=NEC Address=0x0 Command=0xC Raw-Data=0xF30CFF00 32 bits LSB first Gap=499200us Duration=68750us
Send with: IrSender.sendNEC(0x0, 0xC, <numberOfRepeats>);

Received command 0xC = Btn 1.
Protocol=NEC Address=0x0 Command=0xC Repeat Gap=39550us Duration=12200us

Repeat received. Here you can repeat the same action as before.
Protocol=NEC Address=0x0 Command=0x18 Raw-Data=0xE718FF00 32 bits LSB first Gap=424050us Duration=68800us
Send with: IrSender.sendNEC(0x0, 0x18, <numberOfRepeats>);

Received command 0x18 = Btn 2.
Protocol=NEC Address=0x0 Command=0x18 Repeat Gap=39700us Duration=12250us

Repeat received. Here you can repeat the same action as before.
Protocol=NEC Address=0x0 Command=0x5E Raw-Data=0xA15EFF00 32 bits LSB first Gap=349000us Duration=68800us
Send with: IrSender.sendNEC(0x0, 0x5E, <numberOfRepeats>);

Received command 0x5E = Btn 3.
Protocol=NEC Address=0x0 Command=0x5E Repeat Gap=39800us Duration=12250us
相关推荐
金銀銅鐵2 小时前
为什么枚举类中可以定义抽象方法
java·后端·ai编程
陈随易2 小时前
Vue 编译器换掉 source map,快了三四成
前端·后端·程序员
txxzjmzlh4 小时前
SpringBoot 统⼀功能处理
java·spring boot·后端
nice_lcj5206 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
IT_陈寒6 小时前
Redis大key删除为什么会导致服务卡顿?我的线上事故复盘
前端·人工智能·后端
系统集成-鹰翔6 小时前
ERP图片改名后仍命中识别缓存:缓存键、十分钟到期与调用计数
javascript·经验分享·后端
用户8356290780517 小时前
使用 Python 在 Excel 中添加和自定义迷你图
后端·python
码事漫谈7 小时前
给AI看一颗❤️,它就开始写递归了
后端
用户8356290780517 小时前
使用 Python 在 Excel 图表中添加趋势线与回归方程
后端·python
你三大爷7 小时前
Netty / Kafka / Redis 保序问题的源码对比与 NIO 框架主流解法
后端·架构