本文介绍使用Arduino Uno控制红外模块的示例程序。这个程序将读取红外接收器接收到的数据,并通过串口监视器显示出来,并打印各按键。
1.连接红外接收器到Arduino:
- VCC 连接到 Arduino 的 5VGND 连接到 Arduino 的 GNDOUT 连接到 Arduino 的数字引脚2
2.安装IRremote库。
3.代码
#include <Arduino.h>#include <IRremote.hpp> // Include the library// Define the pin connected to the IR receiver#define IR_RECEIVE_PIN 2void 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.输出信息
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=68750usSend with: IrSender.sendNEC(0x0, 0xC, <numberOfRepeats>);Received command 0xC = Btn 1.Protocol=NEC Address=0x0 Command=0xC Repeat Gap=39550us Duration=12200usRepeat 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=68800usSend with: IrSender.sendNEC(0x0, 0x18, <numberOfRepeats>);Received command 0x18 = Btn 2.Protocol=NEC Address=0x0 Command=0x18 Repeat Gap=39700us Duration=12250usRepeat 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=68800usSend with: IrSender.sendNEC(0x0, 0x5E, <numberOfRepeats>);Received command 0x5E = Btn 3.Protocol=NEC Address=0x0 Command=0x5E Repeat Gap=39800us Duration=12250us