不知道是不是我的搜索方式有误,我搜到的有关Arduino使用IRremote库发射红外信号时,对于引脚的使用都是默认为在库函数里面定义了为pin 3,且不可修改,但我在库文件中查看之后发现实际上是可以在代码中对引脚进行修改的:
这是IRSend.hpp中对于IRSend的部分代码:
IRsend::IRsend(uint_fast8_t aSendPin) { // @suppress("Class members should be properly initialized")
sendPin = aSendPin;
# if !defined(NO_LED_FEEDBACK_CODE)
setLEDFeedback(0, DO_NOT_ENABLE_LED_FEEDBACK);
# endif
}
下面是实际运用:
#include <IRremote.h>
#define IRledPin 12 // 设置你想要使用的红外发射器连接的引脚
IRsend irsend(IRledPin); // 将引脚传递给IRsend对象
void setup() {
}
void loop() {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); //发射Sony红外遥控协议A90指令码
delay(40);
}
/*
* IRremote库支持NEC, Sony, Philips RC5, Philips RC6等协议指令。
* 本示例程序中Arduino将通过调用函数sendSony(0xa90, 12) 来发射Sony协议指令。
* 该函数的两个参数中, 0xa90为指令信息内容,12位指令信息位数。
*
* 假如需要发射NEC协议指令则可以调用函数sendNEC(0xF740BF, 32)。
* 其中0xF740BF为指令信息内容,32位指令信息位数。
*
* 如果需要发射其它遥控协议指令请参考以下程序代码:
* sendNEC(unsigned long data, int nbits); //发射NEC协议指令
* sendSony(unsigned long data, int nbits); //发射Sony协议指令
* void sendRC5(unsigned long data, int nbits); //发射Philips RC5协议指令
* void sendRC6(unsigned long data, int nbits); //发射Philips RC6协议指令
* void sendSharp(unsigned long data, int nbits); //发射Sharp协议指令
* void sendPanasonic(unsigned int address, unsigned long data); //发射Panasonic协议指令
* void sendJVC(unsigned long data, int nbits, int repeat); //发射JVC协议指令
* void sendRaw(unsigned int buf[], int len, int hz); //发射原始指令
*/
delay(5000); //延迟5秒
}
这样就将发射引脚定位为了pin 12,实测最终能够成功发出红外信号。