我正在开发一个用arduino控制电视的项目。为了模仿遥控器,我尝试使用红外 LED 发送信号。但是,它没有发送任何内容。我正在 arduino nano 上运行此代码。以下是我正在使用的代码:
#include <IRremote.h>
// Define switch pin
const int switchPin = 7;
// Define a variable for the button state
int buttonState = 0;
// Create IR Send Object
IRsend irsend;
void setup()
{
// Set Switch pin as Input
pinMode(switchPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Set button state depending upon switch position
buttonState = digitalRead(switchPin);
// If button is pressed send power code command
if (buttonState == HIGH) {
irsend.sendSony(0x24052816, 20); // TV power code
Serial.print("1");
}
// Add a small delay before repeating
delay(200);
}
(注意这不是我的代码,我是根据我找到的网站修改的)。
我还使用arduino uno制作了一个红外接收器程序,当我按下电视遥控器上的按钮时,该程序正在工作并显示。我已经使用该程序尝试查看我的 LED 是否正在传输任何内容,但它在串行监视器中没有显示任何内容。如果有帮助,这是我用于接收器的代码:
#include <IRremote.h>
// Define sensor pin
const int RECV_PIN = 4;
// Define IR Receiver and Results Objects
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
// Serial Monitor @ 9600 baud
Serial.begin(9600);
// Enable the IR Receiver
irrecv.enableIRIn();
}
void loop(){
if (irrecv.decode(&results)){
// Print Code in HEX
Serial.println(results.value, HEX);
irrecv.resume();
}
}
我尝试在 LED 上使用 100 欧姆和 220 欧姆电阻。我知道接线不是问题,因为它适用于普通 LED。我尝试更换 IR LED,但它们都遇到了同样的问题。另外,我用万用表检查了二极管是否正常,万用表返回约 0.8 伏。有人知道我的代码或电路本身可能有什么问题吗?如果您对如何让 arduino 控制我的电视有任何其他想法,我也会感兴趣。
提前致谢, 蒂姆
这里有几件事。
irsend.sendSony()
的第二个参数是第一个参数中提供的位数。在您的情况下,您有:irsend.sendSony(0x24052816, 20)
- 0x24052816 是 32 位。
第二个问题是,当发送到索尼时,您需要重复发送调用 3 次,间隔 40 毫秒。这应该发送索尼开机/关机代码:
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // 12 bit wide Sony TV power code
delay(40);
}
如果您将其放入您的程序中,它现在应该可以工作了。如果没有,您应该仔细检查您的 IRLED 是否位于引脚 3 上。我发现我的 IRLED 在使用 330 欧姆电阻时工作正常,因此您的 220 欧姆电阻应该没问题。如果您仍然不满意,您可能需要查看示波器上的引脚 3,以检查发送到它的脉冲。